Linux系统安装后一般都是自带Python的,但如果我们想自己选择特定的Python版本,那就需要编译安装。我们希望自己安装的Python能够与系统Python隔离开来,且能够任意切换使用的Python,所以除了正常的编译安装外,还需要一点小小的配置。
1. 查看当前系统环境
执行
which python
which python2
which python3
可以看到当前系统Python的安装位置,比如我在Ubuntu20下看到了
/usr/bin/python3
在debian10下看到了
/usr/bin/python
/usr/bin/python2
/usr/bin/python3
了解就好,配置Python版本管理时会用到。
2. 编译安装Python
首先安装编译基本依赖
apt install build-essential
接着去Python官网下载你所想要安装的Python版本,例如Python3.10.5:
wget https://www.python.org/ftp/python/3.10.5/Python-3.10.5.tar.xz
解压缩
tar -xvf Python-3.10.5.tar.xz
进入目录
cd Python-3.10.5/
此时如果直接编译Python也是可以的,但是使用过程中可能因为依赖缺失造成部分第三方库报错,所以推荐把依赖全部装好。
sudo apt-get build-dep python3
sudo apt-get install pkg-config
sudo apt-get install gdb lcov pkg-config libbz2-dev libffi-dev libgdbm-dev libgdbm-compat-dev liblzma-dev libncurses5-dev libreadline6-dev libsqlite3-dev libssl-dev lzma lzma-dev tk-dev uuid-dev zlib1g-dev
如果有报错
E: You must put some 'deb-src' URIs in your sources.list
那就添加一下,在/etc/apt/sources.list
底部添加对应的源
比如Ubuntu20添加
deb-src http://archive.ubuntu.com/ubuntu/ focal main
Ubuntu22添加
deb-src http://archive.ubuntu.com/ubuntu/ jammy main
添加完成后更新一下
sudo apt-get update
更新后重新安装上面的依赖,就可以正常安装了。
现在开始编译,选择开启优化
./configure --enable-optimizations --with-lto
make -j $(nproc)
make altinstall
因为是要多版本共存,所以注意上面是使用make altinstall而不是make install
此时执行
python3.10
就应该可以正常使用Python了
3. Python版本管理
如果只进行到上一步必然是不行的,虽然Python已经安装完成了,但是多版本管理的问题依旧没有解决,我相信绝大多数人是不会愿意每次输入python3.10和pip3.10来操作的,而是喜欢python和pip
查看Python安装位置
which python3.10
上面我们并没有指明安装路径,所以应该安装到了默认路径
/usr/local/bin/python3.10
我们使用update-alternatives进行版本管理
首先将新安装的python地址和第一步看到系统原有的python路径全部添加进去
格式为
update-alternatives --install 链接路径 管理名称 源文件路径 权重
权重越大则代表优先级越高,例如
update-alternatives --install /usr/local/bin/python python /usr/local/bin/python3.10 3
update-alternatives --install /usr/local/bin/python python /usr/bin/python3 2
update-alternatives --install /usr/local/bin/python python /usr/bin/python2 1
如果需要管理python,使用
update-alternatives --config python
可以使用自动管理,也可以手动选择使用哪个python
完全相同的,将pip也添加进去
update-alternatives --install /usr/local/bin/pip pip /usr/local/bin/pip3.10 3
update-alternatives --install /usr/local/bin/pip pip /usr/bin/pip3 2
update-alternatives --install /usr/local/bin/pip pip /usr/bin/pip2 1
注意有的系统Python是没带pip的,那样的话就不用添加进去了
同样的,管理pip使用
update-alternatives --config pip
选择好后,最后验证一下
python -V
pip -V
如果版本一致且pip操作的python路径就是你希望的python路径的话,那么就没有问题了。