博客 / 詳情

返回

便攜式Python構建腳本

源代碼

簡介

便攜式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工具
  • 基本的系統開發庫

基本用法

腳本支持三種主要命令模式:

  1. 構建新的Python環境(默認)

    ./build_python.sh build [選項]
  2. 更新已有Python環境的包

    ./build_python.sh update-packages <Python安裝路徑> [選項]
  3. 為已有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環境創建便攜式包。

參數:

  1. 工作目錄:包含Python安裝的目錄
  2. 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腳本進行測試

其他提示

  1. 建議在構建前備份重要數據
  2. 可以使用--download-only選項只下載源碼包
  3. 使用--no-verify可以跳過源碼包校驗(不推薦)
  4. 編譯時間取決於系統配置,可能需要較長時間
  5. 推薦使用絕對路徑指定目錄
user avatar tekin_cn 頭像
1 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.