由于最近用Python写了一个跟目标检测相关的小工具,如果直接分发代码文件一来是不够优雅,二来是对非计算机领域的用户来说不够友好,因此我萌生了给小工具打包的想法。
本来我以为这应该是一个轻松而愉快的过程,一行命令一个回车,然后去摸鱼20分钟,回来就可以收获到一个完美打好包的可执行文件。然而事情并没有我想象的那般顺利,甚至可以说是困难重重、荆棘丛生。不断地排查原因查找可能的错误,最后我花了两天的时间才终于打出了一个可以完美运行的可执行文件。
因此,我希望这一篇文章可以帮助到也正在为Python程序打包而苦恼的同学们。
小结:--onefile
选项下打出来的包本身就具备可移植性,因此不需要额外加上 --standalone
。--onefile
打包结果像绿色软件,仅一个可执行文件;--standalone
的打包结果像经过安装的软件,文件夹下包含运行所需要的文件和程序入口。
--enable-plugin=pyside6
。具体的插件列表可以使用nuitka --plugin-list
来查看。打包程序往往并不是一次就能够打包成功的,常常会出现分析不出一部分的引用关系,忽略了一些数据文件等等情况。在这些情况下,我们需要根据运行程序后显示的报错信息,使用下面的选项来打出正确的包。
--include-package-data=ultralytics
--include-data-files=/Users/admin/Downloads/yolov5n.pt=./yolov5n.pt
--include-data-files=
相同。值得注意的是,图标的格式也可以不是.ico,只需要安装过imageio包,Nuitka便可以自动将图片转换为.ico格式。
python -m nuitka --help # 查看 Nuitka 帮助手册
python -m nuitka --plugin-list # 查看 Nuitka 插件列表
python -m nuitka --standalone --remove-output {your_python_program_name}.py
python -m nuitka --onefile --remove-output {your_python_program_name}.py
python -m nuitka --standalone --disable-console --enable-plugin=pyside6 --remove-output {your_python_GUI_program_name}.py
python -m nuitka --macos-create-app-bundle --disable-console --enable-plugin=pyside6 --remove-output {your_python_GUI_program_name}.py
nuitka
命令,python -m nuitka
是更好的选择。Avoid running the
nuitka
binary, doingpython -m nuitka
will make a 100% sure you are using what you think you are. Using the wrong Python will make it give youSyntaxError
for good code orImportError
for installed modules. That is happening, when you run Nuitka with Python2 on Python3 code and vice versa. By explicitly calling the same Python interpreter binary, you avoid that issue entirely.
It has to be CPython, Anaconda Python.
You need the standard Python implementation, called “CPython”, to execute Nuitka, because it is closely tied to implementation details of it.
如果您觉得我写的还不错的话,希望您可以点个赞,点个收藏,您的支持对我来说非常重要!
我热烈欢迎您转载我的这篇文章,但要求您标明作者与出处。
如果文章中存在侵权之处,也请您告知我,我将及时修改。