PyOxidizer 简介
PyOxidizer 是一个用于将 Python 应用打包为独立可执行文件的工具,支持跨平台部署。它通过将 Python 解释器、标准库及依赖项静态链接到单个二进制文件中,解决传统打包工具(如 PyInstaller)的依赖管理和分发问题。
安装 PyOxidizer
通过 Rust 的包管理器 cargo 安装 PyOxidizer:
cargo install pyoxidizer
确保系统已安装 Rust 工具链(通过 rustup 安装)。
初始化项目
在项目目录中运行以下命令生成配置文件:
pyoxidizer init
会生成 pyoxidizer.bzl 文件,用于定义构建规则和依赖项。
配置打包参数
编辑 pyoxidizer.bzl 文件,指定 Python 版本、依赖项及入口脚本。示例配置片段:
def make_exe():
dist = default_python_distribution()
policy = dist.make_python_packaging_policy()
policy.resources_location = "in-memory"
policy.resources_location_fallback = "filesystem-relative:lib"
exe = dist.to_python_executable(
name="myapp",
packaging_policy=policy,
config=PythonInterpreterConfig(
run_module="myapp.main",
),
)
return exe
添加依赖项
在 pyoxidizer.bzl 中通过 add_python_resources 函数声明依赖:
def make_embedded_resources(exe):
return exe.to_embedded_resources(
add_python_resources=[
exe.pip_install(["-r", "requirements.txt"]),
]
)
构建可执行文件
运行构建命令生成目标平台的二进制文件:
pyoxidizer build
输出文件默认位于 build//release/ 目录。
高级优化
- 减小体积:在 pyoxidizer.bzl 中启用 strip 选项移除调试符号。
- 跨平台编译:通过 --target 参数指定目标平台(如 x86_64-unknown-linux-gnu)。
- 资源嵌入:将静态文件(如 HTML/CSS)嵌入二进制,避免外部依赖。
调试与问题排查
- 使用 pyoxidizer analyze 分析二进制内容。
- 启用日志输出:RUST_LOG=debug pyoxidizer build。

