Lxn-Chan!

(~ ̄▽ ̄)→))* ̄▽ ̄*)o

在 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 -Vpython3 -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 -Vpip3 -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备19013963号

中国互联网违法和不良信息举报中心

架构版本号:8.1.5 | 本站已全面支持IPv6

本站由又拍云提供CDN加速服务和存储服务

正在载入运行数据(1/2)请稍后...
正在载入运行数据(2/2)请稍后...

Copyright 2024 LingXuanNing, All rights reserved.