在 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 安裝編譯依賴

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

特性altinstallinstall
主版本號保留系統 Python可能覆蓋系統 Python
命令名稱python2.7python
安全性
推薦場景多版本共存單一版本環境

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88479.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88479.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88479.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

doker以及網站案例

一.docker搭建1.安裝dockerapt-get install docker.io docker-compose2.編寫配置文件(注意路徑正確)vim /etc/systemd/system/docker.service.d/http-proxy.conf[Service] Environment"HTTP_PROXYhttp://科學上網訪問的ip:端口" Environment&q…

【HarmonyOS Next之旅】DevEco Studio使用指南(四十一) -> 獲取自定義編譯參數

目錄 1 -> HAP/HSP運行時獲取編譯構建參數 1.1 -> 生成BuildProfile類文件 1.2 -> 在代碼中獲取構建參數 1.3 -> 默認參數 1.4 -> 自定義參數 2 -> HAR運行時獲取編譯構建參數 2.1 -> 生成BuildProfile類文件 2.2 -> 在代碼中獲取構建參數 2.…

NGINX系統基于PHP部署應用

目錄 部署 配置 部署 準備三臺主機,一臺服務端,兩臺客戶端; 1.在兩臺客戶端主機上分別安裝 MySQL; [rootmaster /]#yum install -y mysql nginx; [rootmaster /]#yum install -y nginx PHP; [rootmaster /]#yum install -y php PHP-m…

ip地址可以精確到什么級別?如何獲取/更改ip地址

IP地址的精確級別和獲取/更改方式取決于其類型(公網IP vs 內網IP),以下是詳細解答: 一、IP地址的精確級別 1. 公網IP地址(互聯網可見) 定位級別精度范圍說明國家/地區級約95%準確通過IP數據庫(…

Linux(Centos 7.6)命令詳解:useradd

1.命令作用創建新用戶或更新默認的新用戶信息(create a new user or update default new user information)2.命令語法Usage: useradd [options] LOGINuseradd -Duseradd -D [options]3.參數詳解OPTION:-b, --base-dir BASE_DIR,新帳戶的主目錄的基本目錄&#xff1…

異步I/O庫:libuv、libev、libevent與libeio

異步I/O編程是現代高性能網絡服務的核心,而libuv、libev、libevent、libeio這四個庫則是這一領域的常青樹。它們雖同屬事件驅動模型,卻在設計哲學、適用場景和實現細節上各具特色。本文將深入剖析其異同。 一、共同點:異步事件驅動 事件循環&…

go go go 出發咯 - go web開發入門系列(四) 數據庫ORM框架集成與解讀

go go go 出發咯 - go web開發入門系列(四) 數據庫ORM框架集成與解讀 往期回顧 go go go 出發咯 - go web開發入門系列(一) helloworldgo go go 出發咯 - go web開發入門系列(二) Gin 框架實戰指南go go g…

CD47.【C++ Dev】list的模擬實現(2)

目錄 1.const修飾的迭代器的實現 方法1:分成兩個類 完整代碼 方法2:STL庫的寫法 2.STL庫的第三個模版參數T*的解釋 ->->的簡寫語法 3.其他成員函數 insert erase push_back、push_front、pop_front、pop_back size clear 析構函數~list() 拷貝構造函數(★…

UI前端與數字孿生融合新領域拓展:智慧教育的虛擬實驗室建設

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩!一、引言:虛擬實驗室 —— 打破教育邊界的技術革命傳統實驗教學正面臨 “設備昂貴、…

7. TCP 和 UDP 的區別

總結 TCP 面向連接,需要三次握手建立連接,UDP 無連接,不需要握手,直接發送數據。UDP 有較好的實時性,效率比 TCP 高。TCP 面向字節流,實際上是 TCP 把數據看成一連串無結構的字節流,UDP 是面向報…

iOS Widget 開發-7:TimelineProvider 機制全解析:構建未來時間線

在 WidgetKit 中,TimelineProvider 是小組件生命周期的核心機制之一。它控制著 數據獲取時機、展示內容 與 刷新策略,是實現時間驅動內容更新的基礎。 本文將介紹 TimelineProvider 的工作原理、設計模式、常見場景與高級用法,幫助大家構建智…

基于PHP/MySQL的企業培訓考試系統源碼,高并發、穩定運行,源碼開源可二開

溫馨提示:文末有資源獲取方式這是一款專為企業設計的開源培訓考試系統,采用PHPMySQL技術棧開發,具有高并發處理能力和穩定運行特性。系統源碼完全開放,支持二次開發,可滿足各類企業的培訓考核需求。核心功能特點1. 高性…

時序數據庫InfluxDB

一.定義 時序數據庫 是一種專門用于高效存儲和查詢帶有時間戳的數據的數據庫。如果你的數據是隨著時間變化而不斷產生,并且你想知道過去某一時刻發生了什么,那么你應該用時序數據庫。 這類數據通常具有以下特征: 數據點按時間順序不斷寫入…

2025.07.09華為機考真題解析-第三題300分

?? 點擊直達筆試專欄 ??《大廠筆試突圍》 ?? 春秋招筆試突圍在線OJ ?? 筆試突圍OJ 03. 博物館安保攝像頭配置 問題描述 A先生負責為一家新開的博物館設計安保監控系統。博物館有多個展廳需要監控,每個展廳都有不同的面積。現在有多種型號的監控攝像頭可供選擇,每…

存儲過程封裝:復雜業務邏輯的性能優化

存儲過程作為數據庫層面的重要功能,能夠顯著提升復雜業務邏輯的執行效率。以下是存儲過程在性能優化中的核心優勢、實現策略和實際應用場景。一、存儲過程的核心優勢?網絡傳輸壓縮?存儲過程將多條SQL語句封裝為單次調用,相比應用層多次請求可減少60%-8…

逗號分隔字段統計秘籍:一條SQL實現逗號分割字段的數量分析

一、問題場景與痛點 在數據庫設計中,經常會遇到統計某一些數據的最大數量最小數量等,特別是**逗號分隔字段 **的統計會顯得非常困難 下面以我生產上遇到的一個問題講解: 有個需求是在o_work_order表中統計sn字段中哪個工單號的數量最多&#…

數據庫性能優化指南:解決ORDER BY導致的查詢性能問題( SQL Server )

數據庫性能優化指南:解決ORDER BY導致的查詢性能問題 問題描述 在300萬行的INTERFACE_INTERACTION_LOG表中執行以下查詢: SELECT TOP 1 * FROM INTERFACE_INTERACTION_LOG WHERE 1 1AND (SENDSTATUS 0 OR SENDSTATUS -1)AND SENDMETHOD POSTAND ERRO…

Centos 7下使用C++使用Rdkafka庫實現生產者消費者

1. 了解 Kafka Apache Kafka 是一個分布式流處理平臺,核心功能包括: 發布/訂閱消息系統:解耦生產者和消費者 分布式存儲:持久化、容錯的消息存儲 流處理:實時處理數據流 核心概念: 概念說明BrokerKaf…

UE5多人MOBA+GAS 13、添加死亡、復活邏輯以及布娃娃含物理資產的修改調整

文章目錄使用GE為角色添加定時的Tag控制死亡時間1、添加死亡Tag2、創建死亡GE,并完成相關配置3、在AbilitySystemComponent中監聽屬性的變化,調用GE來添加Tag到角色上4、在角色中監聽ASC傳入的Tag以及Tag的層數,來響應不同的函數添加死亡、復…

Jiasou TideFlow重塑AI SEO全鏈路自動化新標桿

引言 在Google日均處理85億次搜索請求的數字化浪潮中,傳統SEO工作流面臨三大致命瓶頸:人工拓詞效率低下、跨部門協作成本高企、數據監控鏈路斷裂。因此諸如Jiasou AI SEO這樣專門為AI SEO而生的Agent就應運而生了。 背景 Jiasou AIGC不僅僅可以批量生成…