跳到主要内容

PyOxidizer打包python二进制应用程序

介绍

1.PyOxidizer 是一个用于生成嵌入 Python 的二进制文件的实用程序。 PyOxidizer 能够生成单个文件可执行文件具有 Python 的依赖及其所有静态链接的依赖项以及嵌入在可执行文件中的所有资源(如 .pyc 文件).您可以将单个可执行文件复制到另一台机器并运行其中包含的 Python 应用程序. 2.PyOxidizer 生成的可执行文件是由 Rust 编译而来的,Rust 代码负责管理嵌入式 Python 解释器及其所有操作. 3.PyOxidizer 可用于轻松地将解释器添加到任何项目.但反之亦然:PyOxidizer也可用于将 Rust 添加到 Python. 4.由于 PyOxidizerPython 解释器抽象出来,这对最终用户来说可能都是不可见的:你可以将应用程序从 Python 重写为 Rust,而人们甚至可能不知道,因为他们从未见过 libpython、.py 文件

支持平台

  • Windows x86 (32-bit)

  • Windows x86_64/amd64 (64-bit)

  • macOS x86_64 (Intel processors)

  • macOS aarch64 (ARM/Apple processors)

  • Linux i686 (32-bit)

  • Linux x86_64 (64-bit)

安装 pyoxidizer

方式一 直接下载安装

https://github.com/indygreg/PyOxidizer/releases/latest

安装后cmd命令行 运行 pyoxidizer 查看,如果没有可运行文件可自行配置环境变量。

方式二:使用python包管理器pip安装

python3 -m pip install pyoxidizer 更新 python3 -m pip install --upgrade pyoxidizer

方式三:使用rust 包管理器cargo 安装

cargo install pyoxidizer

查看

初始化项目

pyoxidizer init-config-file pyapp

进入pyapp目录,只生成一个配置打包文件pyoxidizer.bzl 配置文件是由Starlark语言来描述,语法与python类似

运行

pyoxidizer run 初次运行会下载python解释器相关依赖dll注(PyOxidizer 0.21.0版本开始默认使用python3.10,后面可以通过配置修改)

pyoxidizer init-config-file 创建的默认配置将生成一个嵌入Python并启动 Python REPL 的可执行文件

配置 pyoxidizer.bzl

1.python打包版本(注最好选用下图中python版本,兼容性好)

dist = default_python_distribution(python_version = "3.9") python_version:可选值3.8, 3.9, 3.10.

打包一个flask python程序

1.在根目录创建app目录,并创建__main__.py(注一定要是文件名一定要是__main__),内容如下

2.安装pipreqs 生成requirements.txt项目依赖文件 pip install pipreqs 同样在根目录生成 pipreqs ./ --encoding=utf8 3.pyoxidizer.bzl配置打包

3.1policy.allow_files = True

3.2policy.file_scanner_emit_files = True 运行模块下__main__.py文件 3.3 python_config.run_module = "app" 3.3

    for resource in exe.pip_install(["-r", "requirements.txt"]):
if type(resource) == "File" and ".so" in resource.path:
print("Adding " + resource.path + " to bundle")
resource.add_include = True
exe.add_python_resource(resource)

exe.add_python_resources(exe.read_package_root(
path=CWD,
packages=["app"],
))