在 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 |
安全性 | 高 | 低 |
推薦場景 | 多版本共存 | 單一版本環境 |