./SUSA-SRA
–statistics.py
–ui.py
–icon.ico
打包后直接把整个 ui.dist 文件夹分发即可:
ui.dist/
├── SUSA-SRA.exe
├── config.ini ← 用户直接编辑这个
└── …
standalone(文件夹) onefile(单文件)
config.ini 位置 exe 同级,固定路径 临时目录,每次变
用户可编辑 直接改 改不了(临时目录)
分发方式 发整个文件夹 发一个 exe
启动速度 快(无需解包) 略慢(每次解包)
最终成功打包命令
python -m nuitka --standalone --enable-plugin=pyside6 --windows-console-mode=force --windows-icon-from-ico=icon.ico --include-data-files=config.ini=config.ini --include-package=polars --include-package=xlsxwriter --include-package=fastexcel --debug --output-filename=SUSA-SRA.exe --output-dir=build ui.py打包过程中遇到的问题:
- 1 图标图片
- [1] 刚开始直接用icon.jpg,报错
- [2] 直接改后缀icon.ico,还是报错
- [3] 用在线转ico的网站将将icon.jpg转成.ico,正常,没有报错
- 2 python代码里不要存在动态导入的库,直接将要使用的库写在每个模块前边通过import …/from … import …导入,否则打的exe包不能找到相应的动态导入的库,会报错
- 3 对于写在每个模块前边的第三方库不用include-package也可以
- 4 对于gui库: pyside6、pyqt 需要使用-enable-plugin参数,刚开始没有也报错
- 5 我此处的配置文件config.ini刚开时没有用–include-data-files包含进去,也是打包后程序启动失败,当有多个其它文件时,可能需要–include-data-dir和include-package-data这两个参数,具体没有区分此处没有了解
- 6 Nuitka可能跟部分第三方库的某些方法不兼容,打的exe包执行时程序崩溃退出。此处代码里刚开始用了polars的pd.write()写数据到本地,直接使用python ui.py启动程序执行并点击执行按钮没有报错,可用Nuitka打的包启动程序后点击执行按钮崩溃掉了,最终发现是Nuitka与polars的pd.write()不兼容,最终换了xlsxwriter,打的包执行没有问题
- 7 --windows-console-mode=force:disable时启动exe时会有黑框,可以从cmd里启动exe,此处比如cmd启动SUSA-SRA.exe可以从cmd里看到代码里加的print()日志;force时启动exe时不会有黑框。
- 8 standalone 和 onefile中建议使用standalone
- 9 自己写的代码的模块名不要跟python内置的库/模块名冲突,否则打包会报错。此处的statistics.py就跟python内置的statistics库冲突,打包失败,后来将statistics.py换成susar_core.py没有报错