便携式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  [选项]
  3. 为已有Python环境创建便携式包

    ./build_python.sh create-package <工作目录> 

命令详解

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. 推荐使用绝对路径指定目录

你可能感兴趣的:(便携式Python构建脚本)