我测试打包成功的环境
window10 + python 3.8 + mingw64-gcc11.3-llvm-14.0.3 + Nuitka 1.0.6 + ccache 4.6(首次执行打包命令时提示安装的。安装在AppData目录下面),可能还有其他依赖
pip install ordered-set 加速打包 nuitka提示 pip install orderedset
Nuitka依赖mingw
mingw64最新版本下载: https://github.com/brechtsanders/winlibs_mingw/releases
gcc版本太老,nuitka也会提示的,上githua下载即可
Nuitka目录,储存一些依赖:C:\Users\zengyw\AppData\Local\Nuitka
第一次测试
在测试中,环境忘记安装requests库,也是打包出了exe,只是双击运行时,cmd一闪而过,将exe拖入cmd执行,发现是报错(提示么有安装requests库),安装后能正常运行。结合后面测试知:打包好的exe还是在电脑上找到了requests库,并且没有报ImportError错误,符合大型第三方库(pytorch,pandas…)不要一股脑打包的说法。
exe依赖文件夹
不带–onefile参数的exe,从dist目录下移出来会报ImportError,都是自己的python脚本报错,所以尝试添加–onefile参数
Traceback (most recent call last):
File "C:\Users\zengyw\Desktop\main.py", line 2, in <module>
File "C:\Users\zengyw\Desktop\Weather.py", line 11, in <module Weather>
ImportError
onefile参数
–onefile在没有此参数的基础上再生成一个可以直接执行的exe,测试成功。
打包成一个exe是,报了一个警告:
Nuitka-Onefile:WARNING: Onefile mode cannot compress without ‘zstandard’ module installed.
Zstandard是Facebook开源的一种快速无损压缩算法库。
一个ImportError错误
找到certifi\core.py line 46
发现报错位置源码为:from importlib.resources import path as get_path, read_text
将,后的read_text,写在下一行,即可解决问题:from importlib.resources import read_text
exe报错可能是编译时忽略了逗号后面的函数?需要多看看其他类似位置的导入,编码规范最好是不使用逗号
我自己写的代码里面也有两处使用了逗号,没有出现ImportError。有遇到此问题或者知道的朋有一起分享一下。
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QDialog
Traceback (most recent call last):
File "C:\Users\zengyw\AppData\Local\Temp\ONEFIL~1\weatherMain.py", line 6, in <module>
File "C:\Users\zengyw\AppData\Local\Temp\ONEFIL~1\requests\__init__.py", line 147, in <module requests>
File "C:\Users\zengyw\AppData\Local\Temp\ONEFIL~1\requests\utils.py", line 24, in <module requests.utils>
File "C:\Users\zengyw\AppData\Local\Temp\ONEFIL~1\requests\certs.py", line 14, in <module requests.certs>
File "C:\Users\zengyw\AppData\Local\Temp\ONEFIL~1\certifi\__init__.py", line 1, in <module certifi>
File "C:\Users\zengyw\AppData\Local\Temp\ONEFIL~1\certifi\core.py", line 46, in <module certifi.core>
ImportError
给exe加一个图标
报错:FATAL: Need to install ‘imageio’ to automatically convert non-ico icon image file in ‘./a.png’.
pip安装即可
目前还没有添加成功,也许是没有找到正确格式图标吧。
基础打包命令
nuitka --standalone --windows-icon-from-ico=.\a.png --show-progress --enable-plugin=pyqt5 --output-dir=out --onefile weatherMain.py
在Kali上的测试
yum install patchelf Linux需要安装,参数 --standalone依赖此库
在linux上测试过,没有这么多安装上的问题,打包出来的是bin文件,只能在linux上运行
ps:以上都是入门Nuitka遇到的一些坑,我也是摸着石头过河,搜到的文章大多不能直接解决问题,希望看到的朋友也要多尝试,希望也能多给大家一点参考。