源代碼
簡介
便攜式Python構建腳本用於創建完全獨立的Python運行環境,包含所有必要的依賴庫,可在相似的Linux系統間移植使用。本腳本支持自定義OpenSSL、SQLite和Python版本,並可配置預裝的Python包。
功能特性
-
支持自定義編譯以下組件(均提供校驗壓縮包哈希值功能):
- Python (默認版本: 3.11.11)
- OpenSSL (默認版本: 3.0.15)
- SQLite (默認版本: 3490000)
- libffi (默認版本: 3.4.7)
- 可選擇性跳過某些組件的編譯
- 支持源碼包完整性校驗
- 支持多線程編譯加速
- 支持預裝指定的Python包
- 支持從本地源碼安裝Python包
- 獨立的包更新功能
- 獨立的打包功能
系統要求
- Linux操作系統
- GCC編譯器和開發工具
- wget下載工具
- 足夠的磁盤空間(建議至少2GB)
- make工具
- 基本的系統開發庫
基本用法
腳本支持三種主要命令模式:
-
構建新的Python環境(默認)
./build_python.sh build [選項] -
更新已有Python環境的包
./build_python.sh update-packages <Python安裝路徑> [選項] -
為已有Python環境創建便攜式包
./build_python.sh create-package <工作目錄> <Python版本>
命令詳解
build 命令
構建新的便攜式Python環境。這是默認命令,可以省略build關鍵字。
常用選項:
以下選項均有默認值,都可以不指定。
-p, --python-version: 指定Python版本-o, --openssl-version: 指定OpenSSL版本-s, --sqlite-version: 指定SQLite版本-y, --sqlite-year: 指定SQLite版本的發佈年。例如3490000發佈年是2025。--libffi-version: 指定LIBFFI版本。-i, --install-dir: 指定Python編譯後的安裝目錄。-j, --jobs: 編譯線程數。--openssl-sha256: 指定OpenSSL版本壓縮包的SHA256值。--python-md5: 指定Python壓縮包的MD5值。--sqlite-sha256: 指定SQLite版本壓縮包的SHA256值。--libffi-sha256: 指定LIBFFI版本壓縮包的SHA256值。--no-veryfi: 跳過上述哈希校驗。-w, --work-dir: 指定工作目錄-j, --jobs: 指定編譯線程數--packages: 指定要安裝的Python包列表--local-packages-dir: 指定本地Python包源碼目錄
示例:
# 使用指定版本構建
./build_python.sh build --python-version 3.11.11 --openssl-version 3.0.15
# 指定工作目錄和編譯線程數
./build_python.sh build --work-dir /tmp/python-build --jobs 4
# 安裝額外的Python包
./build_python.sh build --packages "numpy pandas matplotlib"
update-packages 命令
更新已有Python環境的包,無需重新編譯Python。
選項:
--packages: 指定要安裝的Python包列表--local-packages-dir: 指定本地Python包源碼目錄
示例:
# 更新默認包
./build_python.sh update-packages /path/to/python/install
# 安裝指定包
./build_python.sh update-packages /path/to/python/install --packages "tensorflow torch"
# 從本地源碼安裝包
./build_python.sh update-packages /path/to/python/install --local-packages-dir /path/to/packages
create-package 命令
為已有的Python環境創建便攜式包。
參數:
- 工作目錄:包含Python安裝的目錄
- Python版本:用於命名生成的壓縮包
示例:
# 創建便攜式包
./build_python.sh create-package /path/to/work/dir 3.11.11
常見場景
場景1:首次構建便攜式Python
./build_python.sh build \
--python-version 3.11.11 \
--openssl-version 3.0.15 \
--work-dir /opt/portable-python \
--jobs 4
場景2:更新已有環境的包
# 更新所有默認包
./build_python.sh update-packages /opt/portable-python/python
# 安裝新的包
./build_python.sh update-packages /opt/portable-python/python \
--packages "numpy pandas scikit-learn"
場景3:重新打包已有環境
./build_python.sh create-package /opt/portable-python 3.11.11
故障排除
1. 編譯失敗
- 檢查系統依賴是否完整
- 檢查磁盤空間是否充足
- 查看詳細日誌輸出
- 嘗試清理工作目錄後重新編譯
2. 包安裝失敗
- 檢查網絡連接
- 確認包名稱是否正確
- 檢查Python環境路徑是否正確
- 嘗試單獨安裝失敗的包
3. 打包失敗
- 確認工作目錄下存在Python安裝
- 檢查磁盤空間是否充足
- 確認對目標目錄有寫入權限
4. 便攜式包不能運行
- 檢查目標系統的glibc版本是否兼容
- 確認所有必要的庫文件都已包含
- 檢查文件權限是否正確
- 使用提供的test-python.sh腳本進行測試
其他提示
- 建議在構建前備份重要數據
- 可以使用
--download-only選項只下載源碼包 - 使用
--no-verify可以跳過源碼包校驗(不推薦) - 編譯時間取決於系統配置,可能需要較長時間
- 推薦使用絕對路徑指定目錄