使用Nuitka打包Python代码
工作中碰到这样一个场景,N个不同的文件要邮件分别发送给N个部门。
之前因为仅仅是个人使用,所以在Excel里通过VBA来实现,最近听同事说他们也有这类需求,便想着把自己写的小工具分享给他们。但单位统一装的是WPS,兼容性存在一定问题,亦或者遇到宏被禁用却不知道降低宏安全性的情况,着实比较麻烦。
于是抽时间写了一个Python的版本,调试一切正常后,接下来就是打包发布了。N年前试用过 PyInstaller 打包,打包后文件比较大,启动也比较慢,体验不是很好,这次准备试试Nuitka。
准备工作
以下步骤基于Windows平台
- 新建一个虚拟环境,安装Python程序所需要的库(过程略)
- 安装
Nutika
,在虚拟环境下执行pip install nuitka
,安装完成后,可以执行nuitka --version
查看版本号 - (可选)手工安装
Nutika
依赖,并添加环境变量
Nuitka依赖以下三个工具,如缺失编译时会提示下载,输入 Yes
自动下载至 C:\Users\用户名\AppData\Local\Nuitka\Nuitka
目录下:
- ccache
- depends
- gcc:这个文件比较大,下载失败的话,可以手动下载。最新的Win64 UCRT runtime 版(名称如:
winlibs-x86_64-posix-seh-gcc-版本号-llvm-版本号-mingw-w64ucrt-版本号
),并将解压后的目录添加到环境变量
参数说明
在虚拟环境中执行 nuitka -h
或 nuitka --help
可以查看 Nuitka
的参数说明,以下列出常用的参数。
建议:调试时不要添加 --windows-disable-console
参数,用于显示命令窗口,方便运行报错时查找报错原因,调试完成后发布时再加上。
一般编译参数
--mingw64
:默认为已经安装的vs2017去编译,否则就按指定的比如mingw(官方建议)--standalone
:独立环境,这是必须的(否则拷给别人无法使用)--onefile
:像PyInstaller一样打包成单个exe文件--windows-disable-console
:运行时没有CMD控制窗口--show-memory
:显示编译时的内存占用--show-progress
:显示编译时的进度--output-dir=out
:指定编译输出结果的路径为out
文件夹
模块控制参数
--nofollow-imports
:不编译代码中所有的import--nofollow-import-to=openpyxl,pandas
:不编译指定的import,多个用,
分隔--follow-imports
:编译代码中所有的import--follow-import-to=need,src
:指定需要编译的源码文件夹,多个文件夹用,
分隔
插件控制参数
执行 nuitka --plugin-list
可以查看支持的插件
--enable-plugin=插件名称
或--plugin-enable=插件名称
:启用插件,默认为空--disable-plugin=插件名称
或--plugin-disable=插件名称
:禁用插件,默认为空
例:
--enable-plugin=tk-inter
:打包Tkinter程序时--enable-plugin=pyqt5
:打包PyQt5程序时--enable-plugin=pyside6
:打包PySide6程序时--enable-plugin=numpy
:打包numpy模块时--enable-plugin=torch
: 打包pytorch的刚需--enable-plugin=tensorflow
:打包tensorflow的刚需
软件信息参数
--linux-onefile-icon=app.ico
:Linux下的图标位置--windows-icon-from-ico=app.ico
:windows下软件的ico图标--windows-company-name=
:Windows下软件公司信息--windows-product-name=
:Windows下软件名称--windows-file-version=
:Windows下软件的信息--windows-product-version=
:Windows下软件的产品信息--windows-file-description=
:Windows下软件的作用描述--windows-uac-admin=
:Windows下用户可以使用管理员权限来安装
执行编译
在虚拟环境中,执行编译脚本。以下为我的Python小工具调试时的编译脚本,发布时加上 --windows-disable-console
禁用命令行窗口,供参考。
nuitka --standalone --mingw64 --show-progress --enable-plugin=pyside6 --nofollow-import-to=openpyxl --windows-icon-from-ico=app.ico --windows-company-name="CrazyM" --windows-product-name="MailTools" --windows-file-description="邮件批量发送工具" --windows-product-version=0.4.1.0 --output-dir=out app.py
- 本文链接:http://notesth.com/compile-python-code-with-nuitka.html
- 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。