Nuitka打包python脚本

Python脚本打包

Python是解释执行语言,需要解释器才能运行代码,这就导致在开发机上编写的代码在别的电脑上无法直接运行,除非目标机器上也安装了Python解释器,有时候还需要额外安装Python第三方包,相当麻烦。

事实上Python并不适合干这种事,但有时候确实需要Python编写的程序打包给他人一键运行。

思路通常都是分析脚本依赖(所有使用到的模块),然后收集相关资源,为了能在目标机器上正确运行,会根据不同的操作系统设置一些启动代码,最后将这些收集的资源和启动代码打包成一个目标机器上的可执行文件。

这个可执行文件包含了启动应用所需的所有内容,包括一个小型引导加载程序。这个引导加载程序负责在运行时定位并加载Python解释器的动态链接库以及你的应用程序及其所有依赖项。也就是说,其实连带打包了运行该应用所需的最小化Python环境。

如果执行exe可以发现,在本地文件系统中会解压生成临时目录,然后使用最小的Python环境执行了编译过的Python脚本。

Nuitka一键打包

这里介绍Nuitka的方式,也是Pyside6默认的打包方式。

以打包tkinter图形界面程序为例。

bash 复制代码
 python -m nuitka --onefile --enable-plugins=tk-inter --include-data-dir=images=images --include-data-dir=audio=audio  --windows-console-mode=disable --macos-create-app-bundle --macos-app-icon=./images/locked.png main.py

简单解释一下这些参数

  • --onefile,打包成一个单独的文件,--standalone打包成一个目录。
  • --enable-plugins=tk-inter,tkinter程序需要。
  • --include-data-dir=audio=audio,打包程序所用到的数据或者资源文件,audio=audio的意思是当前打包目录下的audio文件夹会被打进去,启动可执行程序后,资源文件会被解压为audio文件夹到运行目录。可以有多个该选项打包多个目录。在入口python脚本中以相对路径的方式引用资源文件即可
  • --windows-console-mode,disable表示禁用控制台窗口,执行程序不会出现终端。
  • --macos-create-app-bundle,macos专用
  • --macos-app-icon,mac上指定应用程序图标,可以是png和ico文件,需要pip install imageio。
  • --windows-icon-from-ico,windows上指定应用程序图标。
相关推荐
无敌最俊朗@18 小时前
Qt多线程阻塞:为何信号失效?
java·开发语言
ii_best18 小时前
「安卓开发辅助工具按键精灵」xml全分辨率插件jsd插件脚本教程
android·xml·开发语言·编辑器·安卓
李慕婉学姐18 小时前
【开题答辩过程】以《基于python的气象灾害数据分析与可视化系统》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
开发语言·python·数据分析
拾贰_C18 小时前
【pytorch | torchvision | datasets】ImageFolder()类
人工智能·pytorch·python
深蓝海拓18 小时前
PySide6从0开始学习的笔记(八) 控件(Widget)之QSlider(滑动条)
笔记·python·qt·学习·pyqt
一起养小猫18 小时前
《Java数据结构与算法》第四篇(三)二叉树遍历详解_CSDN文章
java·开发语言·数据结构
dazzle18 小时前
《DataFrame可视化与高级方法》
python·pandas
消失的旧时光-194318 小时前
从 Android 回调到 C 接口:函数指针 + void* self 的一次彻底理解
android·c语言·开发语言
Blossom.11818 小时前
Transformer时序预测实战:用PyTorch构建股价预测模型
运维·人工智能·pytorch·python·深度学习·自动化·transformer
我命由我1234518 小时前
Python Flask 开发问题:ImportError: cannot import name ‘escape‘ from ‘flask‘
服务器·开发语言·后端·python·flask·学习方法·python3.11