在 Ubuntu 24.04 中安装 Python 2.7、pip 及 mysqlclient==1.4.6 的完整指南

发布于:2025-07-11 ⋅ 阅读:(23) ⋅ 点赞:(0)

在 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 生态的关键步骤:

  1. 手动编译 Python 2.7
  2. 安装特定版本的 pip
  3. 解决 mysqlclient 的依赖问题

虽然过程有些复杂,但通过本文的方法,你应该能够在 Ubuntu 24.04 上成功搭建 Python 2.7 的开发环境。

注意事项

  1. Python 2.7 已停止维护,存在安全风险
  2. 建议尽快将项目迁移到 Python 3
  3. 对于长期维护的项目,推荐使用 Docker 容器隔离环境

原理

组件架构与依赖关系

1. Python 2.7 运行环境架构
┌───────────────────────────────────┐
│          Python 2.7 解释器        │
│  ┌─────────────┬───────────────┐  │
│  │  标准库      │  扩展模块      │  │
│  │ (zlib, ssl) │ (MySQLdb等)   │  │
└──┴─────────────┴───────────────┴──┘
     ▲           ▲           ▲
     │           │           │
┌────┴───┐ ┌─────┴─────┐ ┌───┴────┐
│ zlib   │ │ OpenSSL    │ │ MySQL  │
│ 开发库  │ │ 开发库      │ │ 客户端库 │
└────────┘ └───────────┘ └────────┘

2. 关键组件交互原理

(1) zlib 与 Python 的关系
  • 作用:提供数据压缩功能
  • 报错原理
    • Python 解释器在启动时需要加载.zip格式的标准库
    • 缺少 zlib 会导致无法解压这些文件
  • 典型错误
    zipimport.ZipImportError: can't decompress data
    
(2) MySQLdb/mysqlclient 的编译过程
┌─────────────┐   ┌─────────────┐   ┌─────────────┐
│ Python.h    │   │ mysql.h     │   │ 其他系统头文件 │
└──────┬──────┘   └──────┬──────┘   └──────┬──────┘
       │                 │                 │
       └────────┬────────┴────────┬────────┘
                │                 │
         ┌──────▼──────┐   ┌──────▼──────┐
         │ 预处理器处理  │   │ 编译器(gcc)  │
         └──────┬──────┘   └──────┬──────┘
                │                 │
         ┌──────▼──────┐   ┌──────▼──────┐
         │ 中间对象文件  │   │ 链接器(ld)   │
         └──────┬──────┘   └──────┬──────┘
                │                 │
                └──────┬──────────┘
                       │
                ┌──────▼──────┐
                │ 最终.so文件   │
                └─────────────┘
(3) pip 安装机制
  1. 解析依赖关系
  2. 下载 wheel 或源码包
  3. 对于源码包:
    • 执行 setup.py
    • 调用系统编译器构建扩展
  4. 将包安装到 site-packages

典型错误原理分析

1. mysql_config not found 深层原因

setup.py
调用 mysql_config
是否存在
获取编译参数
抛出 EnvironmentError
传递给编译器
  • 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
安全性
推荐场景 多版本共存 单一版本环境

网站公告

今日签到

点亮在社区的每一天
去签到