在预装Python 3.10的Ubuntu 22.04中部署Python 2.7项目的最优方案
在Ubuntu 22.04上共存Python 2.7与Python 3.10的可行方案
直接安装Python 2.7是否可行?
完全可行,但绝对不能替换系统默认的Python 3.10——Ubuntu 22.04的核心工具(如apt)依赖Python 3,强行替换会导致系统崩溃。正确的做法是将Python 2.7安装到独立路径,与系统Python彻底隔离。
最优实现策略
1. 安装Python 2.7编译依赖
Ubuntu 22.04没有Python 2的预编译包,需从源码编译,先安装编译所需依赖:
sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget
2. 编译安装Python 2.7到独立目录
下载Python 2.7.18(最后一个稳定版)源码,编译时指定专属安装路径,避免污染系统环境:
wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz tar xzf Python-2.7.18.tgz cd Python-2.7.18 ./configure --prefix=/usr/local/python27 --enable-optimizations make -j$(nproc) sudo make install
3. 配置环境变量(可选)
将Python 2.7的可执行路径加入PATH,但放在系统Python路径之后,确保系统默认调用的仍是Python 3:
编辑~/.bashrc或~/.zshrc,添加:
export PATH=$PATH:/usr/local/python27/bin
生效配置:
source ~/.bashrc
此时可通过python2/pip2调用Python 2.7,系统默认的python/python3仍指向Python 3.10,互不干扰。
4. 为Python 2.7搭建虚拟环境
Python 2.7不支持内置venv模块,需用virtualenv实现环境隔离:
先安装Python 2版本的pip:
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py | sudo /usr/local/python27/bin/python2
再安装virtualenv:
sudo pip2 install virtualenv
创建并激活项目专属虚拟环境:
mkdir python2_project && cd python2_project virtualenv -p /usr/local/python27/bin/python2 venv source venv/bin/activate
激活后,python会指向虚拟环境内的Python 2.7,直接执行python setup.py install即可安装依赖,完全不会影响系统或Python 3环境。
5. Python 3.10环境的保留与使用
系统默认的Python 3.10无需改动,如需隔离升级项目,直接用内置venv:
mkdir python3_project && cd python3_project python3 -m venv venv source venv/bin/activate python setup.py install
退出虚拟环境执行deactivate命令即可。
关键注意事项
- 永远不要用
sudo pip2 install安装包,避免污染全局Python 2环境,所有依赖都安装在虚拟环境内。 - 调用命令时明确指定
python2/pip2或python3/pip3,彻底避免版本混淆。 - 不要修改系统默认的
/usr/bin/python软链接,否则会破坏系统核心工具。
内容的提问来源于stack exchange,提问作者Stamatis Tzanos
相关产品推荐
相关产品推荐

