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
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
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
# 備份
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。
echo "/usr/local/python2.7/lib" > /etc/ld.so.conf.d/python2.7.conf
ldconfig
# 使用新版 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 版本過舊。