Python 打包工具 Nuitka 入门指南

这篇具有很好参考价值的文章主要介绍了Python 打包工具 Nuitka 入门指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python 打包工具 Nuitka 入门指南

起因

由于最近用Python写了一个跟目标检测相关的小工具,如果直接分发代码文件一来是不够优雅,二来是对非计算机领域的用户来说不够友好,因此我萌生了给小工具打包的想法。

本来我以为这应该是一个轻松而愉快的过程,一行命令一个回车,然后去摸鱼20分钟,回来就可以收获到一个完美打好包的可执行文件。然而事情并没有我想象的那般顺利,甚至可以说是困难重重、荆棘丛生。不断地排查原因查找可能的错误,最后我花了两天的时间才终于打出了一个可以完美运行的可执行文件。

因此,我希望这一篇文章可以帮助到也正在为Python程序打包而苦恼的同学们。

环境

  • Python 3.9 (CPython)
  • Nuitka 1.5.3

常用选项

通用选项

  • –standalone 使得打包结果与本地的Python环境无关,即使得打包结果具备可移植性。
  • –onefile 使得打包结果为一个可执行文件,而不是一个文件夹。

小结:--onefile选项下打出来的包本身就具备可移植性,因此不需要额外加上 --standalone--onefile 打包结果像绿色软件,仅一个可执行文件;--standalone的打包结果像经过安装的软件,文件夹下包含运行所需要的文件和程序入口。

  • –remove-output 在打包结束后,清理打包过程中生成的临时文件。
  • –enable-plugin= 启用插件,等号后跟插件名。在要打包的Python代码使用了一些特殊的包时,需要启用插件,Nuitka才能够正确打包。如:如在代码中使用了PySide6,就需要加上--enable-plugin=pyside6。具体的插件列表可以使用nuitka --plugin-list来查看。
  • –disable-console 在运行打包后的程序时,不会弹出控制台,而是直接运行GUI程序。

手动修复选项

打包程序往往并不是一次就能够打包成功的,常常会出现分析不出一部分的引用关系,忽略了一些数据文件等等情况。在这些情况下,我们需要根据运行程序后显示的报错信息,使用下面的选项来打出正确的包。

  • –include-package-data= 包含给定软件包名称中的数据文件,等号后软件包名称。有的时候Nuitka并不能正确分析出一些Python软件包所需要使用的数据文件,在运行程序时提示FileNotFoundError等错误,此时就需要使用该选项。如:--include-package-data=ultralytics
  • –include-data-files= 按文件名包含数据文件,等号后的格式为<SRC=DEST>。SRC指的是文件夹的路径,DEST指的是文件夹相对于打包结果的路径,其中DEST只能使用相对路径。如:--include-data-files=/Users/admin/Downloads/yolov5n.pt=./yolov5n.pt
  • –include-data-dir= 包含文件夹中的数据文件,等号后的格式为<SRC=DEST>。使用方法与--include-data-files=相同。

Windows 独占选项

  • –windows-icon-from-ico= 为打包后的可执行文件添加图标,等号后跟图标文件路径。

值得注意的是,图标的格式也可以不是.ico,只需要安装过imageio包,Nuitka便可以自动将图片转换为.ico格式。

MacOS独占选项

  • –macos-create-app-bundle 创建应用程序(.app),而不是Unix可执行文件。(截至 Nuitka 1.5.3 还是实验性功能,可用性较低)
  • –macos-app-icon= 设置应用程序图标,等号后跟图标文件路径。同样,图标的格式也可以不是.icns,只需要安装过imageio包,Nuitka便可以自动将图片转换为.icns格式。

无需关注的选项

  • –follow-imports 作用是在打包过程中分析程序的引用关系,将Python主程序引用的包也一并打包。其实这件事本身很重要,毕竟在大多数情况下应该没人希望Nuitka只打包一个Python主程序文件。但是在 --standalone 和 --onefile 下,该选项是强制启用的,因此不需要额外加上。
  • –nofollow-import-to= 作用是在打包过程中忽略指定的Python软件包。作为入门指南,我不建议使用该选项,因为不当使用会引入一些难以解决的问题。

实用命令

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

注意事项

  1. 官方文档中提到,相对于直接使用nuitka命令,python -m nuitka是更好的选择。

Avoid running the nuitka binary, doing python -m nuitka will make a 100% sure you are using what you think you are. Using the wrong Python will make it give you SyntaxError for good code or ImportError 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.

  1. 用于执行Nuitka的Python解释器最好是CPython,即Python解释器的标准实现。使用Apple Python等Python解释器部分功能将受限。

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.

优点

  1. 对动态链接库的分析相对准确
  2. 打包生成的软件占用空间较小

缺点

  1. 打包时间相对较长
  2. 有商业版本,需要收费

尾声

如果您觉得我写的还不错的话,希望您可以点个赞,点个收藏,您的支持对我来说非常重要!

我热烈欢迎您转载我的这篇文章,但要求您标明作者与出处。

如果文章中存在侵权之处,也请您告知我,我将及时修改。文章来源地址https://www.toymoban.com/news/detail-596496.html

参考

  1. Nuitka User Manual — Nuitka the Python Compiler documentation
  2. Nuitka Github 仓库

到了这里,关于Python 打包工具 Nuitka 入门指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python】使用nuitka打包Python程序为EXE可执行程序

    1.说明 写好的Python程序如果想要拿到其他电脑上运行,那还得安装一下Python环境和各种库,这是比较麻烦的,所以有必要把它打包成一个可执行的exe文件。可以打包exe的库有好多个,比如说pyinstaller、cx_Freeze等。 pyinstaller打包比较简单,如果有需要可以参考之前的文章【Pyth

    2024年01月25日
    浏览(41)
  • nuitka打包python的PyQt5成exe可执行文件

    可以打包多文件,也可以打包单文件。 使用的python版本是3.8.10 1、下载gcc 方式1:可以到网站下载,点我跳转 方式2:可以直接去网盘下载,点我跳转 提取码:8888 网盘里面也有python3.8.10的安装包,下载后直接安装即可。 下载 64位 winlibs-x86_64-posix-seh-gcc-11.3.0-llvm-14. 后,解压到

    2024年02月05日
    浏览(57)
  • nuitka打包软件程序

    1、打包参数含义 2、打包成文件夹 nuitka --standalone --windows-disable-console --show-memory --show-progress --plugin-enable=pyside6 --follow-imports --output-dir=out --windows-icon-from-ico=./icon.ico xxx.py 3、打包成一个exe nuitka --onefile --windows-disable-console --show-memory --show-progress --plugin-enable=pyside6 --follow-imports -

    2024年02月14日
    浏览(45)
  • Nuitka打包教程

    目录 1、Nuitka环境安装 2、安装nuitka 3、防止环境变量不生效,重启项目、重启电脑。 4、打包常用命令。使用nuitka --help可查看所有命令 5、常规打包一段简单的pyside代码  6、升级:只编译我们自己编写的代码。引用的代码全部使用pyd来访问。 7、包缺失 8、用 enigmaprotector 再次

    2024年02月02日
    浏览(33)
  • pycharm 项目打包制作安装包教程(pyinstaller/nuitka + nsis)

    目录 1.pycharm + pyinstaller + nsis(zip方式) 2.pycharm + nuitka + nsis + VNISEdit (目前使用) 一.在pycharm使用pyinstaller打包项目 先准备好要打包的python项目 将项目文件在terminal中打开 安装 pyinstaller pip install pyinstaller 输入pyinstaller的相关打包指令 我们选用 pyinstaller -D start.py start.py是启动入口

    2024年02月07日
    浏览(42)
  • 热门Java开发工具IDEA入门指南——插件安装方式

    IntelliJ IDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能是非常强大的。 本文给大家讲解在使用IntelliJ I

    2024年02月09日
    浏览(63)
  • 安全测试工具Burpsuit和OWASP ZAP使用入门指南

    安装: 网上有很多相关相关保姆级别教程,所以这里不加赘述了 尽量使用java8版本,破解版兼容8做的比较好 如果发现注册机无法打开或者能打开注册机【run】无法点击唤起软件安装,可以使用命令行工具 java -jar burp-loader-keygen.jar java -Xbootclasspath/p:burp-loader-keygen.jar -jar burps

    2024年02月05日
    浏览(55)
  • 【Maven教程】(三)基础使用篇:入门使用指南——POM编写、业务代码、测试代码、打包与运行、使用Archetype生成项目骨架~

    到目前为止,已经大概了解并安装好了Maven环境, 现在,我们开始创建一个最简单的 Hello World 项目。如果你是初次接触 Maven, 建议按照本文的内容 一步步地编写代码并执行, 其中可能你会碰到一些概念暂时难以理解,但不用着急,记下这些疑难点,我在后续文章中会逐一进行

    2024年02月11日
    浏览(38)
  • 部署深度学习APP的经历(docker,streamlit cloud,nuitka)

    最近,接到一个部署深度学习APP的需求,这个APP使用torch、monai和pydicom等库构建了一个识别CT图像中皮下脂肪、内脏脂肪和骨骼肌,输入是CT图像,输出是识别的图像和相关数据。接手的时候,核心的算法已经制作完成,仅是需要我构建GUI并将其部署到某种途径上,实现其应用

    2024年02月12日
    浏览(37)
  • Python爬虫入门指南

    随着大数据时代的到来,网络爬虫技术变得越来越重要。Python作为一种功能强大的编程语言,非常适合用来编写爬虫程序。本文将带领大家入门Python爬虫,从基础知识讲起,逐步深入实践。 一、爬虫基础知识 网络爬虫,又称为网络蜘蛛、网络机器人,是一种按照一定的规则

    2024年04月10日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包