1. 引言
Ubuntu 22.04 LTS(Jammy Jellyfish)默认只预装了 Python 3。然而,在开发、运维或维护遗留项目时,我们常常需要同时使用 Python 2 和 Python 3。本文将详细介绍在 Ubuntu 22.04 上如何安全、高效地配置 Python 2 和 Python 3 共存环境,包括安装、版本管理、切换方法以及重要的使用注意事项。
2. 系统默认 Python 情况
在 Ubuntu 22.04 中:
- Python 3:系统默认安装,通常为
python3命令,对应的可执行文件是/usr/bin/python3。系统级的python命令可能不存在或指向python3。 - Python 2:不再默认安装。由于 Python 2 已于 2020 年 1 月 1 日停止官方支持,Ubuntu 22.04 移除了其默认安装包。
因此,我们需要手动安装 Python 2,并妥善管理两个版本,避免干扰系统关键组件。
3. 安装 Python 3(如未安装或需特定版本)
虽然系统已预装 Python 3,但你可能需要安装其他版本(如 3.8, 3.9, 3.10)。
3.1 安装特定版本的 Python 3
使用apt安装(推荐安装python3.x和python3.x-venv):
sudoaptupdatesudoaptinstallpython3.9 python3.9-venv python3.9-dev3.2 验证安装
python3.9--version# 输出类似:Python 3.9.184. 安装 Python 2
由于官方仓库已移除 Python 2,我们需要从universe仓库或第三方 PPA 安装。
4.1 启用 universe 仓库并安装
sudoadd-apt-repository universesudoaptupdatesudoaptinstallpython2如果上述方法失败,可以尝试安装python2.7包:
sudoaptinstallpython2.74.2 验证 Python 2 安装
python2--version# 输出类似:Python 2.7.185. 管理多版本 Python:使用update-alternatives
update-alternatives是 Debian/Ubuntu 系统管理多个同类型命令(如python,pip)默认版本的官方工具。
5.1 为python命令设置替代项
注册 Python 3(假设使用
/usr/bin/python3):sudoupdate-alternatives--install/usr/bin/python python /usr/bin/python31注册 Python 2:
sudoupdate-alternatives--install/usr/bin/python python /usr/bin/python22数字
1和2是优先级,数字越大优先级越高。这里设置 Python 2 优先级更高(2 > 1),但最终选择权在交互菜单。
5.2 切换默认python命令版本
运行以下命令进入交互式选择菜单:
sudoupdate-alternatives--configpython你会看到类似输出:
There are 2 choices for the alternative python (providing /usr/bin/python). Selection Path Priority Status ------------------------------------------------------------ * 0 /usr/bin/python3 1 auto mode 1 /usr/bin/python2 2 manual mode 2 /usr/bin/python3 1 manual mode Press <enter> to keep the current choice[*], or type selection number:输入对应的数字(例如1选择 Python 2,2选择 Python 3)并按回车。
5.3 验证切换结果
python--version6. 虚拟环境管理:隔离项目依赖
强烈建议为每个项目使用虚拟环境,避免全局包冲突。
6.1 为 Python 3 创建虚拟环境
使用venv模块(Python 3.3+ 内置):
python3-mvenv myproject_envsourcemyproject_env/bin/activate# 激活后,命令行提示符会变化6.2 为 Python 2 创建虚拟环境
Python 2 需要使用virtualenv工具。
- 先安装
virtualenv(用 Python 3 的 pip 安装):pipinstallvirtualenv - 为 Python 2 项目创建虚拟环境:
virtualenv-ppython2 myproject_py2_envsourcemyproject_py2_env/bin/activate
7. 包管理工具pip的版本管理
每个 Python 版本都有其对应的pip。
- Python 3 的 pip:通常为
pip3命令。 - Python 2 的 pip:需要手动安装或使用
python2 -m pip。
7.1 确保 Python 2 有 pip
curlhttps://bootstrap.pypa.io/pip/2.7/get-pip.py--outputget-pip.pysudopython2 get-pip.py安装后,可以使用pip2命令或python2 -m pip。
7.2 在虚拟环境中使用 pip
在虚拟环境激活后,直接使用pip命令即可,它会自动关联到当前环境的 Python 版本。
8. 使用注意事项与常见问题
8.1 不要删除系统自带的 Python 3
Ubuntu 的许多系统工具(如 apt、gnome-terminal)依赖/usr/bin/python3。删除或替换它可能导致系统不稳定。
8.2 脚本的 Shebang 行
在脚本开头明确指定解释器版本,避免依赖模糊的#!/usr/bin/env python。
- 用 Python 3:
#!/usr/bin/env python3 - 用 Python 2:
#!/usr/bin/env python2
8.3 使用python -m执行模块
运行模块时,显式指定版本可以避免混淆:
python3-mpipinstallpackage# 为 Python 3 安装包python2-mpipinstallpackage# 为 Python 2 安装包8.4 检查当前环境
在脚本或命令行中,可以快速检查:
importsysprint(sys.version_info.major)# 输出 2 或 38.5 兼容性工具
对于需要同时支持 Python 2 和 3 的代码,可以考虑使用:
2to3:将 Python 2 代码自动转换为 Python 3。six:一个兼容库,帮助编写同时支持 Python 2 和 3 的代码。future:提供 Python 3 特性在 Python 2 中的 backport。
9. 总结
在 Ubuntu 22.04 上管理 Python 2 和 Python 3 的关键步骤:
- 安装:从
universe仓库安装 Python 2,系统已自带 Python 3。 - 管理默认版本:使用
update-alternatives --config python安全切换全局python命令。 - 项目隔离:为每个项目创建独立的虚拟环境(
venv用于 Python 3,virtualenv用于 Python 2)。 - 明确指定:在脚本和命令中,尽量使用
python2、python3、pip2、pip3来避免歧义。 - 保持系统稳定:不要动系统自带的
/usr/bin/python3。
遵循这些实践,你可以在 Ubuntu 22.04 上轻松驾驭双 Python 版本环境,兼顾新项目开发和旧项目维护。