IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Ubuntu 下 Python 编译安装及关联问题解决

    泠泫凝发表于 2023-07-18 02:26:57
    love 0

    在 Ubuntu 下从源码编译安装 Python 并解决一些依赖问题。

    其实遇到的问题主要也就是依赖问腿。

    编译与安装

    1. 下载源码包:
      打开Python Distribution,在里面选择版本然后下载源码包,这里以3.10.12版本为例。
      1
      wget https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tgz
    2. 安装必要依赖:
      1
      2
      apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev \
      libssl-dev libreadline-dev libffi-dev -y
    3. 解压源码包:
      1
      2
      tar -zxvf Python-3.10.12.tgz
      cd Python-3.10.12/
    4. 启用编译优化
      1
      ./configure --enable-optimizations
    5. 编译与安装
      1
      2
      make -j20
      make altinstall
      其中线程数(-j)需要根据实际情况调整,一般来说该值等于CPU核心数。
    6. 测试
      测试一下看一下是否正确安装
      1
      python3.10 --version
      有返回版本号即为正确安装

    创建别名与解决问题

    创建别名后主要遇到的问题是Ubuntu中默认会自带一个Python供apt等系统程序使用,这里我们变更了版本之后或是不兼容或是指向性不明确总之系统程序无法再正确调用Python,思路也很简单要么把别名变更回去,要么修改系统程序的脚本文件头,修改为原来的版本。

    创建别名

    1. 首先看一下是否存在之前的配置:
      1
      update-alternatives --config python3
      这里执行后应该是返回update-alternatives: error: no alternatives for python3。
    2. 找一下二进制文件安装位置
      1
      whereis python3.10
      返回中寻找路径
      1
      python3: /usr/bin/python3 /usr/bin/python3.8 /usr/lib/python3.9 /usr/lib/python3 /usr/lib/python3.8 /etc/python3 /etc/python3.8 /usr/local/bin/python3.10-config /usr/local/bin/python3.10 /usr/local/lib/python3.10 /usr/local/lib/python3.8 /usr/share/python3 /usr/share/man/man1/python3.1.gz
      这里就是/usr/local/bin/python3.10。
    3. 安装别名
      1
      2
      update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.10 3
      update-alternatives --install /usr/bin/python python /usr/local/bin/python3.10 3
      此时可以输入python -V和python3 -V查看是否能正常返回版本号
    4. 用同样的方法寻找pip的二进制文件安装位置,然后添加别名:
      1
      2
      update-alternatives --install /usr/bin/pip pip /usr/local/bin/pip3.10 3
      update-alternatives --install /usr/bin/pip3 pip3 /usr/local/bin/pip3.10 3
      此时可以输入pip -V和pip3 -V查看是否能正常返回版本号

    问题解决

    添加完别名后使用apt安装程序,这个时候可能会报错:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    root@machine:/usr/lib/python3/dist-packages# apt update
    Hit:1 http://mirrors4.tuna.tsinghua.edu.cn/ubuntu focal InRelease
    Hit:2 http://mirrors4.tuna.tsinghua.edu.cn/ubuntu focal-updates InRelease
    Hit:3 http://mirrors4.tuna.tsinghua.edu.cn/ubuntu focal-backports InRelease
    Hit:4 http://mirrors4.tuna.tsinghua.edu.cn/ubuntu focal-security InRelease
    Traceback (most recent call last):
    File "/usr/lib/cnf-update-db", line 8, in <module>
    from CommandNotFound.db.creator import DbCreator
    ModuleNotFoundError: No module named 'CommandNotFound'
    Reading package lists... Done
    E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/lib/command-not-found/ -a -e /usr/lib/cnf-update-db; then /usr/lib/cnf-update-db > /dev/null; fi'
    E: Sub-process returned an error code

    打开第七行中的脚本即/usr/lib/cnf-update-db,可以看到该脚本的文件头是以#!/usr/bin/python3开头的,给他改成#!/usr/bin/python3.8即可。

    1
    2
    3
    4
    5
    6
    7
    #!/usr/bin/python3.8

    import glob
    import logging
    import os
    import sys
    ...

    之后再遇见类似问题均如此解决即可。另外顺带提一句,我这里是Ubuntu 20.04,其他版本自带的Python版本可能不一样,建议提前看好。



沪ICP备19023445号-2号
友情链接