萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

CentOS 5/6/7 手動編譯升級 Python 2.7/3.x 完整教學:避開 yum 相依陷阱

CentOS 5/6 預設 Python 2.4/2.6 過舊,無法運行現代框架。官方倉庫不再更新,需自行編譯安裝新版 Python。關鍵難點:保留系統 Python 供 yum 使用、安裝 zlib-devel 避免模組缺失、修改 yum shebang 指向舊版。本文提供完整編譯安裝流程與 setuptools/pip 部署。

一、 環境準備

# 1. 編譯工具鏈
yum install -y gcc make

# 2. 關鍵庫:zlib-devel (確保 zlib 模組可用,否則 pip/ssl 失效)
yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel

二、 下載、編譯、安裝 Python 2.7.18 (最終版) 或 3.9+


cd /usr/src
# Python 2.7.18
wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz
# 或 Python 3.11.5
wget https://www.python.org/ftp/python/3.11.5/Python-3.11.5.tgz

tar xzf Python-*.tgz
cd Python-*/

# 配置:啟用共享庫、優化、指定安裝前綴避免衝突系統 python
./configure --prefix=/usr/local/python2.7 --enable-shared --enable-optimizations LDFLAGS="-Wl,-rpath /usr/local/python2.7/lib"
# Python 3 同理 --prefix=/usr/local/python3.11

# 編譯安裝(多核加速)
make -j$(nproc)
make install

三、 關鍵後續配置:保護系統 Python

  1. 建立軟連結方便調用(不覆蓋 /usr/bin/python)
    ln -s /usr/local/python2.7/bin/python /usr/local/bin/python2.7
    ln -s /usr/local/python2.7/bin/pip /usr/local/bin/pip2.7
        
  2. 修改 yum 指向系統 Python
    # 備份
    cp /usr/bin/yum /usr/bin/yum.bak
    # 編輯第一行 shebang
    sed -i '1s|^#!/usr/bin/python$|#!/usr/bin/python2.4|' /usr/bin/yum
    # CentOS 6 為 python2.6,CentOS 7 為 python2.7,請按實際版本修改
        

    同理修改 /usr/bin/yum-config-manager、/usr/libexec/urlgrabber-ext-down 等 Python 腳本的 shebang。

  3. 動態庫路徑生效
    echo "/usr/local/python2.7/lib" > /etc/ld.so.conf.d/python2.7.conf
    ldconfig
        

四、 安裝 setuptools、pip、virtualenv


# 使用新版 python 確保 pip 可用
/usr/local/python2.7/bin/python -m ensurepip --upgrade
# 或手動
wget https://bootstrap.pypa.io/get-pip.py
/usr/local/python2.7/bin/python get-pip.py

# 安裝 virtualenv
/usr/local/python2.7/bin/pip install virtualenv

五、 多版本共存最佳實踐

策略適用場景
pyenv (推薦)開發機、需頻繁切換版本、專案隔離
Software Collections (SCL)RHEL/CentOS 7 生產環境,官方支援 rh-python36 等
手動編譯 + 替代路徑舊版 CentOS 5/6、極簡環境、無網離線安裝
Docker 容器微服務部署、CI/CD、環境一致性

六、 常見坑點速查

  • ModuleNotFoundError: No module named '_ssl' → 缺 openssl-devel 重編譯。
  • zipimport.ZipImportError → 缺 zlib-devel 重編譯。
  • yum 掛掉 → shebang 未改或改錯,恢復備份檔。
  • pip install 報 SSL certificate verify failed → 缺 ca-certificates 或 OpenSSL 版本過舊。
copyright © 萬盛學電腦網 all rights reserved