在 Ubuntu 24.04 中安装 Python 2.7、pip 及 mysqlclient==1.4.6 的完整指南
前言
随着 Ubuntu 24.04 的发布,许多旧的软件包已被移除或更新,但老项目需要 Python 2 。本文将详细介绍自己如何在 Ubuntu 24.04 中成功安装 Python 2.7、pip 以及 mysqlclient==1.4.6的命令和遇到的问题。
环境说明
- 操作系统: Ubuntu 24.04 LTS
- 目标软件:
- Python 2.7.18
- pip 20.3.4 (最后一个支持 Python 2.7 的版本)
- mysqlclient==1.4.6
1. 安装 Python 2.7
由于 Ubuntu 24.04 已移除 Python 2.7 的官方软件包,我们需要手动编译安装。
1.1 安装编译依赖
sudo apt update
sudo apt install build-essential zlib1g-dev libncurses5-dev \
libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget
1.2 下载并编译 Python 2.7.18
Python-2.7.18.tgz直接下载会失败,可通过手动浏览器代理下载再移到目录中。
后续安装pip中zlib扩展报了错,又重新编译一次。(后面有详细介绍)
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 --enable-optimizations --with-zlib=/usr/include
make -j$(nproc)
sudo make altinstall
1.3 验证安装
python2.7 --version
# 应输出: Python 2.7.18
2. 安装 pip
Python 2.7 需要特定版本的 pip。
2.1 安装 pip 20.3.4
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
python2.7 get-pip.py
2.2 解决 PATH 问题
安装完成后可能会提示 PATH 未包含 pip 安装目录:
# 临时添加
export PATH=$PATH:~/.local/bin# 永久添加
echo 'export PATH=$PATH:~/.local/bin' >> ~/.bashrc
source ~/.bashrc
2.3 验证 pip
python2.7 -m pip --version
# 应输出: pip 20.3.4 from ... (python 2.7)
3. 安装 mysqlclient==1.4.6
这是最具挑战性的部分,因为需要解决依赖问题。
3.1 安装系统依赖
sudo apt install python2.7-dev libmysqlclient-dev
注意:Ubuntu 24.04 已移除 python-dev
包,必须明确安装 python2.7-dev
。 或只装libmysqlclient-dev
3.2 安装 mysqlclient
python2.7 -m pip install --no-cache-dir mysqlclient==1.4.6
3.3 验证安装
python2.7 -c "import MySQLdb; print(MySQLdb.__version__)"
# 应输出: 1.4.6
遇到的问题及解决方案
1. Python 2.7 安装阶段报错
报错1:缺少 zlib 支持
zipimport.ZipImportError: can't decompress data; zlib not available
解决方案:
sudo apt install zlib1g-dev
cd Python-2.7.18
make clean
./configure --enable-optimizations --with-zlib=/usr/include
make -j$(nproc)
sudo make altinstall
报错2:编译时缺少其他依赖
ModuleNotFoundError: No module named '_ctypes'
解决方案:
sudo apt install libffi-dev
make clean && make -j$(nproc)
2. pip 安装阶段报错
报错3:pip 安装 SSL 错误
pip is configured with locations that require TLS/SSL
解决方案:
sudo apt install libssl-dev
python2.7 get-pip.py --trusted-host pypi.org --trusted-host files.pythonhosted.org
报错4:pip 命令找不到
Command 'pip' not found
解决方案:
export PATH=$PATH:~/.local/bin
echo 'export PATH=$PATH:~/.local/bin' >> ~/.bashrc
source ~/.bashrc
3. mysqlclient 安装阶段报错
报错5:mysql_config not found
EnvironmentError: mysql_config not found
解决方案:
sudo apt install libmysqlclient-dev
报错6:Python.h 头文件缺失
fatal error: Python.h: No such file or directory
解决方案:
sudo apt install python2.7-dev
4. 运行时常见报错
报错9:ImportError: No module named MySQLdb
ImportError: No module named MySQLdb
解决方案:
python2.7 -m pip install mysqlclient==1.4.6
5. 总结
在 Ubuntu 24.04 中安装 Python 2.7 生态的关键步骤:
- 手动编译 Python 2.7
- 安装特定版本的 pip
- 解决 mysqlclient 的依赖问题
虽然过程有些复杂,但通过本文的方法,你应该能够在 Ubuntu 24.04 上成功搭建 Python 2.7 的开发环境。
注意事项
- Python 2.7 已停止维护,存在安全风险
- 建议尽快将项目迁移到 Python 3
- 对于长期维护的项目,推荐使用 Docker 容器隔离环境
原理
组件架构与依赖关系
1. Python 2.7 运行环境架构
┌───────────────────────────────────┐
│ Python 2.7 解释器 │
│ ┌─────────────┬───────────────┐ │
│ │ 标准库 │ 扩展模块 │ │
│ │ (zlib, ssl) │ (MySQLdb等) │ │
└──┴─────────────┴───────────────┴──┘▲ ▲ ▲│ │ │
┌────┴───┐ ┌─────┴─────┐ ┌───┴────┐
│ zlib │ │ OpenSSL │ │ MySQL │
│ 开发库 │ │ 开发库 │ │ 客户端库 │
└────────┘ └───────────┘ └────────┘
2. 关键组件交互原理
(1) zlib 与 Python 的关系
- 作用:提供数据压缩功能
- 报错原理:
- Python 解释器在启动时需要加载
.zip
格式的标准库 - 缺少 zlib 会导致无法解压这些文件
- Python 解释器在启动时需要加载
- 典型错误:
zipimport.ZipImportError: can't decompress data
(2) MySQLdb/mysqlclient 的编译过程
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Python.h │ │ mysql.h │ │ 其他系统头文件 │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘│ │ │└────────┬────────┴────────┬────────┘│ │┌──────▼──────┐ ┌──────▼──────┐│ 预处理器处理 │ │ 编译器(gcc) │└──────┬──────┘ └──────┬──────┘│ │┌──────▼──────┐ ┌──────▼──────┐│ 中间对象文件 │ │ 链接器(ld) │└──────┬──────┘ └──────┬──────┘│ │└──────┬──────────┘│┌──────▼──────┐│ 最终.so文件 │└─────────────┘
(3) pip 安装机制
- 解析依赖关系
- 下载 wheel 或源码包
- 对于源码包:
- 执行
setup.py
- 调用系统编译器构建扩展
- 执行
- 将包安装到 site-packages
典型错误原理分析
1. mysql_config not found
深层原因
mysql_config
是 MySQL 提供的脚本- 作用:返回正确的编译参数和链接路径
- 缺失后果:无法确定如何链接 MySQL 客户端库
2. Python.h 缺失问题
- 产生原因:
- Python 扩展模块需要 Python 开发头文件
- Ubuntu 将头文件分离到
pythonX.Y-dev
包
- 关键文件:
Python.h
(Python C API 入口)modsupport.h
(模块支持头文件)pyconfig.h
(平台相关配置)
3. SSL 相关错误机制
┌───────────────────┐ ┌───────────────────┐
│ pip 客户端 │───────│ PyPI 服务器 │
└─────────┬─────────┘ HTTPS └───────────────────┘│ ▲│ │▼ │
┌───────────────────┐ ┌───────┴───────┐
│ 系统OpenSSL库 │ │ 证书验证 │
└───────────────────┘ └───────────────┘
- 错误根源:Python 2.7 使用的 OpenSSL 版本过旧
- 现代系统 OpenSSL 不向后兼容
解决方案设计原理
1. --no-cache-dir
的作用
- 避免使用可能损坏的缓存
- 强制重新下载依赖项
- 在依赖冲突时特别有用
2. altinstall
vs install
特性 | altinstall | install |
---|---|---|
主版本号 | 保留系统 Python | 可能覆盖系统 Python |
命令名称 | python2.7 | python |
安全性 | 高 | 低 |
推荐场景 | 多版本共存 | 单一版本环境 |