工作中碰到这样一个场景,N个不同的文件要邮件分别发送给N个部门。

之前因为仅仅是个人使用,所以在Excel里通过VBA来实现,最近听同事说他们也有这类需求,便想着把自己写的小工具分享给他们。但单位统一装的是WPS,兼容性存在一定问题,亦或者遇到宏被禁用却不知道降低宏安全性的情况,着实比较麻烦。

于是抽时间写了一个Python的版本,调试一切正常后,接下来就是打包发布了。N年前试用过 PyInstaller 打包,打包后文件比较大,启动也比较慢,体验不是很好,这次准备试试Nuitka

准备工作

以下步骤基于Windows平台

  1. 新建一个虚拟环境,安装Python程序所需要的库(过程略)
  2. 安装 Nutika,在虚拟环境下执行 pip install nuitka,安装完成后,可以执行 nuitka --version 查看版本号
  3. (可选)手工安装 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 -hnuitka --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

 title=

标签: Python

添加新评论