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

在 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 安装编译依赖

bash 复制代码
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扩展报了错,又重新编译一次。(后面有详细介绍)

bash 复制代码
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 验证安装

bash 复制代码
python2.7 --version
# 应输出: Python 2.7.18

2. 安装 pip

Python 2.7 需要特定版本的 pip。

2.1 安装 pip 20.3.4

bash 复制代码
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 安装目录:

bash 复制代码
# 临时添加
export PATH=$PATH:~/.local/bin

# 永久添加
echo 'export PATH=$PATH:~/.local/bin' >> ~/.bashrc
source ~/.bashrc

2.3 验证 pip

bash 复制代码
python2.7 -m pip --version
# 应输出: pip 20.3.4 from ... (python 2.7)

3. 安装 mysqlclient==1.4.6

这是最具挑战性的部分,因为需要解决依赖问题。

3.1 安装系统依赖

bash 复制代码
sudo apt install python2.7-dev libmysqlclient-dev

注意:Ubuntu 24.04 已移除 python-dev 包,必须明确安装 python2.7-dev。 或只装libmysqlclient-dev

3.2 安装 mysqlclient

bash 复制代码
python2.7 -m pip install --no-cache-dir mysqlclient==1.4.6

3.3 验证安装

bash 复制代码
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

解决方案

bash 复制代码
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'

解决方案

bash 复制代码
sudo apt install libffi-dev
make clean && make -j$(nproc)

2. pip 安装阶段报错

报错3:pip 安装 SSL 错误
复制代码
pip is configured with locations that require TLS/SSL

解决方案

bash 复制代码
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

解决方案

bash 复制代码
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

解决方案

bash 复制代码
sudo apt install libmysqlclient-dev
报错6:Python.h 头文件缺失
复制代码
fatal error: Python.h: No such file or directory

解决方案

bash 复制代码
sudo apt install python2.7-dev

4. 运行时常见报错

报错9:ImportError: No module named MySQLdb
复制代码
ImportError: No module named MySQLdb

解决方案

bash 复制代码
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 会导致无法解压这些文件
  • 典型错误

    python 复制代码
    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
安全性
推荐场景 多版本共存 单一版本环境
相关推荐
天下不喵18 小时前
python项目部署之pytandic与.env的使用教程
python·docker
shenzhenNBA18 小时前
python如何调用AI之deepseek的API接口?
人工智能·python·deepseek·调用deepseek api
咖啡の猫18 小时前
Python集合的创建
python·哈希算法·散列表
石像鬼₧魂石18 小时前
SET的钓鱼网站钓鱼模块
windows·学习·ubuntu
LitchiCheng19 小时前
Mujoco 使用 Pinocchio 进行逆动力学及阻抗力矩控制维持当前位置
人工智能·python
殇者知忧19 小时前
凯斯西储(CWRU)数据集解读与数据读取
python·凯斯西储(cwru)数据集
街灯L19 小时前
【Ubuntu】Python uploadserver 文件传输服务器
linux·服务器·ubuntu
deephub19 小时前
Scikit-Learn 1.8引入 Array API,支持 PyTorch 与 CuPy 张量的原生 GPU 加速
人工智能·pytorch·python·机器学习·scikit-learn
free-elcmacom20 小时前
机器学习高阶教程<11>当数据开始“折叠”:流形学习与深度神经网络如何发现世界的隐藏维度
人工智能·python·神经网络·学习·算法·机器学习·dnn
月明长歌20 小时前
Java数据结构:PriorityQueue堆与优先级队列:从概念到手写大根堆
java·数据结构·python·leetcode·