CentOS7 多版本 Python 共存

查看当前系统的 Python 版本:

python -V
pip -V

编译环境准备

准备一下编译环境,防止出现安装错误:

yum install gcc make openssl-devel zlib-devel bzip2-devel ncurses-devel sqlite-devel readline-devel expat-devel gdbm-devel tk-devel libffi-devel

下载 Python3 安装包

这里举例下载的版本是Python3.7.3,也可以自行去官网下载其它版本的包:Python 官网 > Python 各版本安装包

wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tar.xz

下载后,按照以下步骤进行安装:

# 将下载的安装包进行解压缩
tar Jxvf Python-3.7.3.tar.xz
# 进入解压缩出来的文件目录
cd Python-3.7.3
# 进行编译
./configure --enable-optimizations
# 安装编译后的 python
make altinstall

建立 Python3 环境的软链接

这里有两种软连接的创建方式:

一种是保持系统自带的 Python 版本,用python3的指令使用所安装版本的 Python。

ln -s /usr/local/bin/python3.7 /usr/bin/python3
ln -s /usr/local/bin/pip3.7 /usr/bin/pip3
# 检验 Python3 及 pip3 版本
python3 -V
pip3 -V

另一种是替代系统自带的 Python 版本的指令。

# 备份原 python 指令链接
mv /usr/bin/python /usr/bin/python.bak
ln -s /usr/local/bin/python3.7 /usr/bin/python
# 备份原 pip 指令链接
mv /usr/bin/pip /usr/bin/pip.bak
ln -s /usr/local/bin/pip3.7 /usr/bin/pip
# 检验 Python 及 pip 对应的版本
python -V
pip -V

第二种替代系统自带 Python 版本指令的操作,会存在一个问题,无法执行yum指令,所以需要修改 yum 指令文件,将头文件改为python2.7,这样 yum 指令又可以正常执行了:

# 使用 vim 分别编辑两个文件的头
vi /usr/libexec/urlgrabber-ext-down
vi /usr/bin/yum

python改为python2.7

#!/usr/bin/python2.7

创建虚拟环境

安装 virtualenv

pip install virtualenv

创建一个用来存放不受干扰的 Python 环境,比如test_python2

virtualenv test_python2
# 进入创建好的 Python 环境
source test_python2/bin/activate

如果要在默认环境下单独创建一个 Python3 的环境,比如test_python3,就需要在创建的命令后面加上参数:

virtualenv --python=/usr/local/bin/python3 test_python3
# 进入创建好的 Python3 环境
source test_python3/bin/activate
# 检查 Python 版本
python -V
# 退出虚拟环境
deactivate

如果每次都输入一长串命令才能进入虚拟环境,还是挺不方便的。因此,可以建立一个快捷键:

# 用 vi 编辑系统配置文件
vi ~/.bashrc
# 用 vv2 指令快速创建默认的 python 环境,vv3 指令快速创建 Python3 环境
alias vv2="virtualenv"
alias vv3="virtualenv --python=/usr/local/bin/python3"
# 用 py3 指令快速进入创建好的某个 python 环境
alias py3="source ~/test_python3/bin/activate"
# 用 qvv 指令快速退出虚拟环境
alias qvv="deactivate"
# 然后 :wq 保存退出并让配置生效
source .bashrc

然后分别使用vv2 环境名vv3 环境名操作试试。

如果要删除虚拟环境,只需退出虚拟环境后,删除对应的虚拟环境目录即可。

发表评论

电子邮件地址不会被公开。 必填项已用*标注