在 Ubuntu 下从源码编译安装 Python 并解决一些依赖问题。
其实遇到的问题主要也就是依赖问腿。
编译与安装
- 下载源码包:
打开Python Distribution,在里面选择版本然后下载源码包,这里以3.10.12
版本为例。1
wget https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tgz
- 安装必要依赖:
1
2apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev \
libssl-dev libreadline-dev libffi-dev -y - 解压源码包:
1
2tar -zxvf Python-3.10.12.tgz
cd Python-3.10.12/ - 启用编译优化
1
./configure --enable-optimizations
- 编译与安装其中线程数(
1
2make -j20
make altinstall-j
)需要根据实际情况调整,一般来说该值等于CPU核心数。 - 测试
测试一下看一下是否正确安装有返回版本号即为正确安装1
python3.10 --version
创建别名与解决问题
创建别名后主要遇到的问题是Ubuntu中默认会自带一个Python供apt等系统程序使用,这里我们变更了版本之后或是不兼容或是指向性不明确总之系统程序无法再正确调用Python,思路也很简单要么把别名变更回去,要么修改系统程序的脚本文件头,修改为原来的版本。
创建别名
- 首先看一下是否存在之前的配置:这里执行后应该是返回
1
update-alternatives --config python3
update-alternatives: error: no alternatives for python3
。 - 找一下二进制文件安装位置返回中寻找路径
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
。 - 安装别名此时可以输入
1
2update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.10 3
update-alternatives --install /usr/bin/python python /usr/local/bin/python3.10 3python -V
和python3 -V
查看是否能正常返回版本号 - 用同样的方法寻找pip的二进制文件安装位置,然后添加别名:此时可以输入
1
2update-alternatives --install /usr/bin/pip pip /usr/local/bin/pip3.10 3
update-alternatives --install /usr/bin/pip3 pip3 /usr/local/bin/pip3.10 3pip -V
和pip3 -V
查看是否能正常返回版本号
问题解决
添加完别名后使用apt安装程序,这个时候可能会报错:
1 | root@machine:/usr/lib/python3/dist-packages# apt update |
打开第七行中的脚本即/usr/lib/cnf-update-db
,可以看到该脚本的文件头是以#!/usr/bin/python3
开头的,给他改成#!/usr/bin/python3.8
即可。
1 | #!/usr/bin/python3.8 |
之后再遇见类似问题均如此解决即可。另外顺带提一句,我这里是Ubuntu 20.04,其他版本自带的Python版本可能不一样,建议提前看好。