PyOxidizer打包python二进制应用程序
介绍
1.PyOxidizer
是一个用于生成嵌入 Python 的二进制文件的实用程序。 PyOxidizer 能够生成单个文件可执行文件具有 Python
的依赖及其所有静态链接的依赖项以及嵌入在可执行文件中的所有资源(如 .pyc
文件).您可以将单个可执行文件复制到另一台机器并运行其中包含的 Python 应用程序.
2.PyOxidizer
生成的可执行文件是由 Rust
编译而来的,Rust
代码负责管理嵌入式 Python
解释器及其所有操作.
3.PyOxidizer
可用于轻松地将解释器添加到任何项目.但反之亦然:PyOxidizer
也可用于将 Rust
添加到 Python
.
4.由于 PyOxidizer
将 Python
解释器抽象出来,这对最终用户来说可能都是不可见的:你可以将应用程序从 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"],
))