资讯动态

Ubuntu 20.04安装Python 2.7:兼容性配置与虚拟环境管理指南

发布时间:2026/8/12 15:10:32 来源:尧图企业网站定制
1. 项目概述为什么在2024年还要折腾Python 2.7如果你看到这个标题第一反应可能是“都什么年代了还在装Python 2.7” 没错Python 2官方支持早在2020年1月1日就已终止主流生态早已全面转向Python 3。但作为一名经常需要维护老旧系统、部署遗留应用或者复现特定研究环境的开发者或运维工程师你一定会理解这个需求的普遍性。我手头就遇到过好几个场景公司内部一个核心的报表系统依赖一套十多年前用Python 2.7写的科学计算库重写成本太高某个学术项目需要复现一篇2015年的论文其代码库明确要求Python 2.7环境甚至是一些嵌入式设备或工业控制软件其SDK仍然只提供Python 2的绑定。Ubuntu 20.04 LTS是一个长期支持版本系统稳定社区支持好是很多生产环境的选择。但它的一个“特点”就是为了推动现代化默认不再预装Python 2甚至连python这个命令都直接指向了Python 3。这就给需要运行老代码的我们带来了第一个障碍。今天要聊的就是在Ubuntu 20.04.3 LTS上干净、可控地安装并配置Python 2.7运行环境。这不仅仅是运行一条apt install命令那么简单它涉及到与系统默认Python 3的和平共处、pip包管理器的独立配置、以及虚拟环境的管理策略。我会把每一步背后的考量、可能踩的坑以及最佳实践都捋清楚让你装好的Python 2.7既能稳定工作又不会把系统环境搞得一团糟。2. 核心思路与方案选型共存而非替代在开始动手之前我们必须明确一个核心原则绝对不要尝试用Python 2.7去替换或覆盖系统自带的Python 3。系统很多核心组件如apt包管理器、桌面环境的一些工具都依赖于Python 3强行替换会导致系统不稳定甚至崩溃。我们的目标是让Python 2.7作为一个独立的、用户级的解释器存在与Python 3并行不悖。基于这个原则我们有几种常见的实现路径直接使用APT仓库安装Ubuntu 20.04的官方仓库里仍然保留了python2.7和python2的包。这是最直接、依赖关系最清晰的方法。安装后解释器命令通常是python2.7或python2。从源代码编译安装从Python官网下载2.7的源代码手动编译。这种方法最灵活可以自定义安装路径、编译选项但步骤繁琐需要解决开发依赖适合对环境有极致定制化需求的场景。使用第三方工具如pyenvpyenv是一个优秀的Python版本管理工具可以让你在同一台机器上轻松安装、切换多个Python版本包括2.7、3.x等。这是管理多版本Python环境最优雅、最推荐的方式特别适合开发人员。对于绝大多数“在Ubuntu上安装Python 2.7来运行某个老项目”的需求方案一APT安装是最简单快捷的。方案三pyenv功能更强大但需要多一步工具安装和配置。本文将重点详解方案一因为它是基础且其原理和遇到的坑具有普遍性。在最后我也会简要介绍pyenv的方案作为进阶选择让你可以根据自己的实际情况做决定。注意无论选择哪种方案都强烈建议在Python 2.7环境下使用virtualenv或venv针对Python 3创建独立的虚拟环境来安装项目依赖。这能完美隔离不同项目间的包冲突也是现代Python开发的基本素养。3. 通过APT安装Python 2.7详细步骤与原理剖析3.1 更新系统包缓存与安装解释器首先打开终端。我们通过APT来安装。sudo apt update这条命令的作用是刷新本地的软件包索引列表让它与Ubuntu的软件源同步。确保我们接下来安装的是源里最新的版本尽管Python 2.7本身已不再更新。接下来安装Python 2.7解释器sudo apt install python2.7执行这个命令后APT会做以下几件事从配置的软件源下载python2.7包及其所有依赖包。将Python 2.7解释器安装到系统标准路径通常是/usr/bin/python2.7。同时它很可能会创建一个符号链接/usr/bin/python2指向/usr/bin/python2.7。安装完成后可以验证python2.7 --version # 输出应类似Python 2.7.18 python2 --version # 输出应类似Python 2.7.18请注意此时输入python --version显示的依然是Python 3.x因为python这个命令默认链接到python3。这是我们期望的结果保护了系统的默认环境。3.2 安装Python 2.7对应的pip包管理器Python 2.7本身不包含pip。我们需要单独安装。这里有一个关键点为了与Python 3的pip通常通过pip3命令调用区分Python 2.7的包管理器通常被称为pip2。在旧版本Ubuntu中可以直接安装python-pip包。但在20.04中这个包可能已被移除或不在主仓库。最可靠的方法是使用Python 2.7专属的安装脚本get-pip.py。首先下载安装脚本。这里使用curl如果你没有安装curl可以先运行sudo apt install curl。curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py重要原理说明bootstrap.pypa.io是Python官方推荐的pip安装脚本托管地址。为不同Python版本提供了对应的脚本。使用2.7的专属脚本能确保安装兼容的pip版本。然后使用刚刚安装的Python 2.7来运行这个脚本sudo python2.7 get-pip.py使用sudo是因为pip将被安装到系统级的目录如/usr/local/bin。安装过程会同时安装pip、setuptools和wheel。安装完成后验证pip2 --version # 输出应类似pip 20.3.4 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)现在你有了专属于Python 2.7的包管理命令pip2。用它安装的包将只对Python 2.7环境可见。3.3 处理“python”命令指向问题可选但重要有些非常陈旧的脚本可能会在代码第一行写#!/usr/bin/env python并且内部语法是Python 2的。在Ubuntu 20.04上直接运行会因调用Python 3而报语法错误。虽然修改脚本是根治办法但有时我们想临时运行一下。绝对不要使用sudo update-alternatives --config python或创建软链接将/usr/bin/python指向python2.7这风险极高。一个安全的方法是在你自己用户的Shell配置文件中为特定的项目目录设置别名或函数。例如在~/.bashrc中新增# 为特定老项目目录启用python指向python2.7 alias oldprojectcd /path/to/old_project python2.7或者在脚本所在目录显式地用python2.7 script.py来执行。这是最清晰、最安全的做法。3.4 为Python 2.7创建和使用虚拟环境虚拟环境是管理项目依赖的黄金标准。对于Python 2.7我们使用virtualenv工具。首先用pip2安装virtualenvsudo pip2 install virtualenv实操心得这里使用sudo是因为我们在系统级为Python 2.7安装virtualenv这个“工具”。后续在虚拟环境中安装项目依赖时就不需要再使用sudo了。假设你的项目目录是~/my_legacy_projectcd ~/my_legacy_project virtualenv venv --pythonpython2.7这条命令做了以下几件事--pythonpython2.7指定使用我们刚安装的Python 2.7解释器来构建虚拟环境。在当前目录下创建一个名为venv的文件夹名字可自定。在venv文件夹内复制了Python 2.7解释器并创建了独立的pip和setuptools。激活虚拟环境source venv/bin/activate激活后你的终端提示符前通常会显示(venv)表示你已进入该环境。此时输入python --version会发现它指向的是Python 2.7.18而pip --version也会显示其路径在venv目录下。在这个环境里安装的所有包使用pip install都会被隔离在venv目录内完全不影响系统级或其他项目的Python环境。安装项目依赖假设有requirements.txtpip install -r requirements.txt工作完成后退出虚拟环境deactivate4. 使用pyenv管理多版本Python进阶方案如果你需要频繁在不同Python版本例如2.7.18, 3.6.15, 3.8.12, 3.10等间切换或者希望将Python安装在用户主目录下避免任何系统级影响那么pyenv是更好的选择。4.1 安装pyenv及其依赖首先安装pyenv的编译依赖sudo apt update sudo apt install -y make build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \ libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev这些库是编译Python源代码所必需的。然后使用官方提供的安装脚本安装pyenv安装到当前用户目录curl https://pyenv.run | bash安装完成后脚本会提示你将几行配置添加到你的Shell配置文件~/.bashrc或~/.zshrc末尾。请按照提示操作然后重启终端或执行source ~/.bashrc使配置生效。4.2 使用pyenv安装并管理Python 2.7.18查看所有可安装的Python版本列表很长pyenv install --list | grep 2.7安装特定版本的Python 2.7例如最后的官方版本2.7.18pyenv install 2.7.18这个过程会从源码下载并编译需要一些时间。编译完成后该版本就被安装在了~/.pyenv/versions/目录下。设置全局默认版本谨慎操作通常不建议将2.7设为全局pyenv global 2.7.18更常见的做法是为特定项目目录设置本地版本cd ~/my_legacy_project pyenv local 2.7.18这会在当前目录创建一个.python-version文件指明在此目录下使用Python 2.7.18。此后你在此目录下执行python或pippyenv会自动切换到2.7.18环境。使用pyenv后pip等工具的管理也集成在内无需再单独运行get-pip.py。虚拟环境管理可以使用pyenv的插件pyenv-virtualenv功能更强大。5. 常见问题、故障排查与实操技巧即便按照步骤操作在实际部署中也可能遇到各种问题。下面是我在多次实践中总结的“避坑指南”。5.1 安装pip时遇到的SSL/TLS证书错误在运行sudo python2.7 get-pip.py时可能会报错pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.这是因为在编译Python 2.7时没有正确链接到系统的OpenSSL库。通过APT安装的python2.7包通常不会有此问题。如果遇到最根本的解决方法是重新从源码编译一个支持SSL的Python 2.7但这比较复杂。一个更简单的临时解决方案是使用--trusted-host参数绕过SSL验证仅用于安装pip这一步有安全风险请确保网络环境安全sudo python2.7 get-pip.py --trusted-host files.pythonhosted.org --trusted-host pypi.org --trusted-host pypi.python.org安装完pip后可以升级pip并安装requests等包它们会处理证书问题。但长期而言对于需要HTTPS访问的生产环境建议解决SSL支持问题或使用内部PyPI镜像源。5.2 使用pip2安装包时速度慢或超时由于PyPI主站在海外国内直接访问可能很慢。为pip2配置国内镜像源能极大提升体验。为用户级的pip配置镜像对当前用户生效mkdir -p ~/.pip cat ~/.pip/pip.conf EOF [global] index-url https://pypi.tuna.tsinghua.edu.cn/simple trusted-host pypi.tuna.tsinghua.edu.cn EOF或者在每次安装时使用-i参数指定镜像pip2 install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package常用的国内镜像还有阿里云(https://mirrors.aliyun.com/pypi/simple/)、中科大等。5.3 虚拟环境中安装包失败或权限错误症状在激活的虚拟环境(venv)中运行pip install报错提示权限不足Permission denied。原因与解决这通常是因为虚拟环境目录venv或其子目录的所有权或权限设置有问题。可能是在创建虚拟环境时使用了sudo或者项目目录本身权限受限。检查所有权确保虚拟环境目录属于当前用户。ls -la查看如果不是用sudo chown -R $USER:$USER venv修改。彻底重建最干净的方法是删除旧的虚拟环境目录确保在不使用sudo的情况下重新创建。rm -rf venv virtualenv venv --pythonpython2.7 source venv/bin/activate重要技巧永远记住在虚拟环境内操作不需要sudo。如果需要sudo才能安装包那说明你的环境激活不对或者虚拟环境本身权限有问题。5.4 某些Python 2.7的C扩展模块编译失败症状安装像MySQL-python即mysqldb这类包含C扩展的包时报错提示找不到Python.h或编译失败。原因缺少Python 2.7的开发头文件。解决安装Python 2.7的开发包sudo apt install python2.7-dev这个包包含了编译C扩展所需的头文件和静态库。安装后通常就能成功编译安装那些依赖C扩展的古老包了。5.5 与系统软件包如apt的潜在冲突核心原则永远不要使用pip2或虚拟环境中的pip去安装或升级那些可能被系统APT包管理器管理的Python模块。例如apt、nginx如果它有Python模块等系统组件依赖的包。这可能导致系统功能损坏。如何安全地检查一个包是否属于系统一个简单的方法是使用dpkg -S查找文件归属dpkg -S $(which python2.7) # 查看python2.7解释器属于哪个包对于不确定的包优先使用APT安装sudo apt install python-xxx或sudo apt install python2-xxx如果APT没有再考虑用pip在虚拟环境中安装。6. 总结与最佳实践建议经过以上步骤你应该已经在Ubuntu 20.04.3 LTS上成功搭建了一个可用的Python 2.7环境。回顾整个过程我想分享几个从无数次“踩坑”中总结出的核心建议这能让你的老旧项目维护工作更顺畅虚拟环境是生命线这是最重要的实践。为每一个遗留项目创建独立的虚拟环境。即使两个项目都用Python 2.7它们的依赖包版本也可能冲突。隔离环境能避免“按下葫芦浮起瓢”的依赖地狱。明确记录环境规格在项目根目录除了requirements.txt我强烈建议创建一个environment.md或类似文件明确写明Python解释器版本如python2.7.18使用的pip版本虚拟环境创建命令任何特殊的系统依赖如通过apt安装的libxxx-dev包遇到并解决过的特殊编译问题 这份文档对未来的你或其他接手者是无价之宝。优先考虑容器化如果条件允许将整个“Ubuntu 20.04 Python 2.7 项目依赖”的环境用Docker封装。这能实现环境的绝对可移植和一致性彻底摆脱“在我机器上是好的”这类问题。Dockerfile的编写可以从一个干净的Ubuntu 20.04镜像开始重复本文的安装步骤即可。制定迁移计划运行Python 2.7终究是权宜之计。在维护老系统的同时应积极评估向Python 3迁移的成本和方案。可以利用2to3工具、python-future库等进行辅助但核心业务逻辑的重写和测试必不可少。将迁移作为一个长期项目来规划逐步推进。最后处理遗留技术栈虽然有时令人头疼但也是工程师价值的体现。它要求我们不仅要有扎实的技术能力更要有耐心、细心和对系统全局的深刻理解。希望这篇详尽的指南能帮你把Ubuntu上的Python 2.7环境搭建得既稳固又清晰让你能更专注于解决业务逻辑本身的问题而不是在环境配置上浪费时间。如果在实际操作中遇到本文未覆盖的古怪问题多利用搜索引擎关键词加上“Ubuntu 20.04 python2.7”和具体的错误信息通常都能在社区找到前人的解决方案。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价