简介
便携式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
可以跳过源码包校验(不推荐) - 编译时间取决于系统配置,可能需要较长时间
- 推荐使用绝对路径指定目录
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。