编译安装纯净python3,不干扰已存在的任何版本python

安装依赖库

1
2
3
4
5
6
7
8
# 基于apt的系统 (如 Debian, Ubuntu, Mint)
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncurses5-dev libncursesw5-dev xz-utils tk-dev

# 基于yum的系统 (如 CentOS)
sudo yum -y install gcc openssl-devel bzip2-devel libffi-devel

准备python源码

https://www.python.org/downloads/ 找到合适的版本并下载源码

编译安装

python 3.9.5 为例。

执行源码包下载及编译安装流程,请确保网络状况良好

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash

# 目标安装位置,修改此变量以安装到其他位置
PYTHON395=/usr/local/python395

# 下载 python 3.9.5
wget https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tgz

# 解压源码包到当前路径下
tar xvf Python-3.9.5.tgz

# 进入源码目录
cd Python-3.9.5

# 配置编译选项
./configure --enable-optimizations --with-ensurepip=install --prefix=${PYTHON395}

# 多线程编译
make -j 8

# 完整安装:修改系统python3指向自己
#sudo make install

# 绿色安装: 不改变系统环境,仅将编译后的结果安装到目标位置下
sudo make altinstall

FAQ

1. 下载安装包失败?

删除已下载的文件,并在检查网络后重试。

2. 编译过程失败?

尝试去掉 --enable-optimizations 选项并重新配置编译安装

3. 安装过程没有权限?

安装过程是绿色可靠的,之所以上述代码在安装时仍然使用了sudo,
但这只是将程序安装到 /usr/local/ 目录下所必需的。
把安装目标位置修改为其他存在权限的目录下,可以去掉 sudo 操作。

4. CentOS 编译时仍然提示缺少依赖?

尝试: sudo yum -y groupinstall "Development Tools"
然后使用 make clean 清理掉编译缓存,接着继续重试配置、编译、安装等操作。

5. WARNING: The script pip3.9 is installed in ‘/usr/local/python395/bin’ which is not on PATH.

可以忽略。这个只是警告python程序的目录无法被直接找到,可以选择将此路径添加的 PATH 环境变量即可。

6. WARNING: Running pip as root will break packages and permissions. You should install packages reliably by using venv: https://pip.pypa.io/warnings/venv

由于在安装步骤我们使用了sudo,导致对应的文件属主都是root,将其修改回来即可。
sudo chown -R user:group /usr/local/python395
当然也可以选择在配置编译前,指定一个普通用户的安装目录,同时去除掉安装时的 sudo 亦可。

7. 不需要纯净安装,如何将 python 加入环境变量?

方案一: 在安装时将 sudo make altinstall 替换为 sudo make install
方案二: 在 ~/.bashrc /etc/bashrc 等文件中任一个加入以下语句即可。注意要修改python路径为自己的实际安装路径。

1
export PATH=$PATH:/usr/local/python395/bin
  • 注意此时的/usr/local/python395/bin路径下仅有 python3.9 和 pip3.9 等文件,直接终端输入 python3 是无法找到这里的。
  • 需要将 python3 的符号链接指向这里的 python3.9 才能完成配置。 即 ln -s /usr/local/python395/bin/python3.9 /usr/bin/python3