本文的demo示例的代码/数据可从笔者的GitCode获取: HelloWorld
工作环境: Windowns10
python版本: Python 3.10.7
安装Nuitka
pip install nuitka
下载 gcc
下载地址 https://github.com/brechtsanders/winlibs_mingw/releases
如果没有下载或下载的版本不对应的话,在打包时会提示相应安装包是否下载, 选择输入"Yes”下载即可. 如果自行下载的 gcc 包, 解压后配置用户环境变量, 将解压路径 xxx\bin
添加的用户环境变量中.
PS: 笔者执行打包时, 还提示安装ccache, 选择Yes自动下载 使用的下载路径.
先构建项目demo脚本, 打印一些信息然后输入文件并读取第一列后再输出.
测试脚本:
python hello.py -i test/data.txt -o test/data.pro.txt
主脚本测试完成后, 开始打包:
# 开始打包主脚本 hello.py
python -m nuitka \
--output-dir=./hellooo \
--standalone --show-memory --show-progress \
--follow-import-to=utils,src \
--windows-icon-from-ico=./logo.ico \
hello.py
参数 | 说明 |
---|---|
–output-dir | 指定输出的结果路径 |
–standalone | 打包成独立的文件 |
–show-progress | 显示打包进度 |
–show-memory | 显示占用内存 |
–follow-import-to | 指定打包时同时打包的源码文件夹,用","分隔 |
–windows-icon-from-ico | 指定打包程序exe的图标 |
其他参数 | |
–mingw64 | 指定编译器 |
–nofollow-imports | 不编译代码中所有的import |
–plugin-enable | 需要加载的插件 |
–windows-disable-console | |
–recurse-all | |
–recurse-not-to | |
–onefile | |
–remove-output | |
–disable-console |
打包程序在输出目录 outdir/xxx.dist/xxx.exe
# 打包程序看help
./hellooo/hello.dist/hello.exe --help
# 使用打包后程序
./hellooo/hello.dist/hello.exe -i test/data.txt -o test/data.test_pack.txt
执行打包程序后,输出目录的文件结构如下:
$ tree.com //a //f
+---hello.build
| | .sconsign-310.dblite
| | @link_input.txt
| | build_definitions.h
| | ccache-24780.txt
| | module.src.c
| | module.src.const
| | module.src.o
| | module.src.source1.c
| | module.src.source1.const
| | module.src.source1.o
| | module.utils.c
| | module.utils.const
| | module.utils.o
| | module.utils.source2.c
| | module.utils.source2.const
| | module.utils.source2.o
| | module.__main__.c
| | module.__main__.const
| | module.__main__.o
| | scons-report.txt
| | __bytecode.const
| | __constants.bin
| | __constants.c
| | __constants.const
| | __constants.h
| | __constants.o
| | __constants.txt
| | __helpers.c
| | __helpers.h
| | __helpers.o
| | __loader.c
| | __loader.o
| |
| \---static_src
| CompiledFunctionType.c
| CompiledFunctionType.o
| MainProgram.c
| MainProgram.o
|
\---hello.dist
hello.exe
python310.dll
ucrtbase.dll
unicodedata.pyd
vcruntime140.dll
_bz2.pyd
_decimal.pyd
_lzma.pyd
当前demo示例下删除了这些文件, 只保留了 hellooo/hello.dist/hello.exe
主程序文件 (4.27M)。