当前位置: 首页 > news >正文

Ubuntu 22.04 配置 Python 2 与 Python 3:安装、管理、版本切换与使用注意事项

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.xpython3.x-venv):

sudoaptupdatesudoaptinstallpython3.9 python3.9-venv python3.9-dev

3.2 验证安装

python3.9--version# 输出类似:Python 3.9.18

4. 安装 Python 2

由于官方仓库已移除 Python 2,我们需要从universe仓库或第三方 PPA 安装。

4.1 启用 universe 仓库并安装

sudoadd-apt-repository universesudoaptupdatesudoaptinstallpython2

如果上述方法失败,可以尝试安装python2.7包:

sudoaptinstallpython2.7

4.2 验证 Python 2 安装

python2--version# 输出类似:Python 2.7.18

5. 管理多版本 Python:使用update-alternatives

update-alternatives是 Debian/Ubuntu 系统管理多个同类型命令(如python,pip)默认版本的官方工具。

5.1 为python命令设置替代项

  1. 注册 Python 3(假设使用/usr/bin/python3):

    sudoupdate-alternatives--install/usr/bin/python python /usr/bin/python31
  2. 注册 Python 2

    sudoupdate-alternatives--install/usr/bin/python python /usr/bin/python22

    数字12是优先级,数字越大优先级越高。这里设置 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--version

6. 虚拟环境管理:隔离项目依赖

强烈建议为每个项目使用虚拟环境,避免全局包冲突。

6.1 为 Python 3 创建虚拟环境

使用venv模块(Python 3.3+ 内置):

python3-mvenv myproject_envsourcemyproject_env/bin/activate# 激活后,命令行提示符会变化

6.2 为 Python 2 创建虚拟环境

Python 2 需要使用virtualenv工具。

  1. 先安装virtualenv(用 Python 3 的 pip 安装):
    pipinstallvirtualenv
  2. 为 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 或 3

8.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 的关键步骤:

  1. 安装:从universe仓库安装 Python 2,系统已自带 Python 3。
  2. 管理默认版本:使用update-alternatives --config python安全切换全局python命令。
  3. 项目隔离:为每个项目创建独立的虚拟环境(venv用于 Python 3,virtualenv用于 Python 2)。
  4. 明确指定:在脚本和命令中,尽量使用python2python3pip2pip3来避免歧义。
  5. 保持系统稳定:不要动系统自带的/usr/bin/python3

遵循这些实践,你可以在 Ubuntu 22.04 上轻松驾驭双 Python 版本环境,兼顾新项目开发和旧项目维护。

http://www.jsqmd.com/news/1107844/

相关文章:

  • 华为认证培训 | 2026年HCIA/HCIP/HCIE选型指南
  • VS Code Mermaid Preview终极指南:零基础掌握30+图表实时预览与编辑
  • YOLOv10模型改进-卷积层改进-第26篇:YOLOv10改进策略【卷积层】| 动态卷积改进方案
  • ScratchJr桌面版:5-7岁儿童编程启蒙的终极指南
  • 回测里最漂亮的那条曲线,可能一行都执行不了——流动性是量化“实验室到现实“的死亡谷
  • HS2-HF Patch:Honey Select 2终极汉化与功能增强解决方案
  • 3分钟实现Unity游戏汉化:XUnity.AutoTranslator完整指南
  • OPENCLAW 是什么?它和 AI工具 以及 AGENT 之间是什么关系?
  • Boss直聘批量投简历工具:从手动筛选到智能匹配的求职效率革命
  • spring,如何判断一个方法是否被事务覆盖
  • OpenCV 工业检测实战:缺陷检测的经典算法与代码实现
  • proxy.py:一个能替代 ngrok 的轻量级代理服务器
  • ComfyUI IPAdapter Plus深度解析:从单图像LoRA到高级图像条件生成的技术实现
  • ScratchJr桌面版:5-7岁儿童编程启蒙的3大突破性优势
  • 【IDEA重构高阶技法】:内联变量的5大误用场景与3步安全执行法
  • 解密铜仁学院登陆算法
  • 【IDEA日志断点黑科技】:5分钟绕过断点阻塞,实现日志实时输出的3种权威方案
  • 油液检测新技术:从铁谱分析到AI故障诊断的技术跃迁
  • 告别杂乱桌面:5分钟用NoFences打造你的专属数字工作空间
  • ASM232全温区电气参数实测分析与工程选型决策指南
  • 终极指南:5步掌握网页资源智能捕获技术
  • 【JetBrains官方未公开文档】:IDEA中Log Output bypass Breakpoint的底层字节码级实现原理
  • ROFL播放器:免费开源工具轻松管理英雄联盟回放文件
  • Linux防火墙配置实战:从iptables到firewalld的完整指南
  • [Texture3DAsset节点]原理解析与实际应用
  • 【限时技术白皮书】:基于237台生产虚拟机压测数据,提炼出VMware+GPU透传在ResNet50/BERT训练场景下的最优vCPU:GPU配比模型
  • 【IDEA并发调试核武器】:从Suspend Policy到Frame Evaluation,6个被官方文档隐藏的调试开关
  • 如何快速配置League Akari:英雄联盟智能助手的终极指南
  • IntelliJ IDEA重命名避坑手册:5步精准验证,告别编译失败与运行时异常
  • Windows内存管理终极方案:Mem Reduct深度解析与实战指南