在 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
安全性
推荐场景 多版本共存 单一版本环境
相关推荐
空影星1 小时前
免费在线图片合成视频工具 ,完全免费
python·flask·电脑·智能硬件
向上的车轮3 小时前
Odoo与Django 的区别是什么?
后端·python·django·odoo
Source.Liu4 小时前
【学Python自动化】 2. Windows Python 解释器使用笔记
windows·python·自动化
竹子_234 小时前
《零基础入门AI:YOLOv2算法解析》
人工智能·python·算法·yolo
MThinker7 小时前
k230 按键拍照后,将摄像头拍照的1920*1080分辨率的图片以jpg文件格式,保存到板载TF存储卡的指定文件夹目录中
python·嵌入式硬件·智能硬件·micropython·canmv·k230
Tipriest_7 小时前
求一个整数x的平方根到指定精度[C++][Python]
开发语言·c++·python
蓝倾9768 小时前
淘宝/天猫店铺商品搜索API(taobao.item_search_shop)返回值详解
android·大数据·开发语言·python·开放api接口·淘宝开放平台
跟橙姐学代码9 小时前
配置文件这么多格式,Python到底该怎么选?一文带你梳理七种常见用法
前端·python·ipython
进阶的小菜菜9 小时前
LeetCode100-240搜索二维矩阵Ⅱ
python·矩阵
~黄夫人~10 小时前
Nginx Ubuntu vs CentOS 常用命令对照表---详解笔记
运维·笔记·学习·nginx·ubuntu·centos