编程学习网 > 编程语言 > Python > python打包教程(Python 打包工具 Nuitka)
2023
06-29

python打包教程(Python 打包工具 Nuitka)

Nuitka 是一个用 Python 编写的 Python 编译器。完全兼容 Python 2.6、2.7、3.4、3.5、3.6、3.7、3.8、3.9、3.10 和 3.11 版本,它以一种极其兼容的方式将未编译的代码和已编译的代码一起执行。Nuitka 将 Python 模块翻译成 C 级程序,然后使用 libpython 和自己的静态 C 文件,以 CPython 的方式执行。


为什么使用 Nuitka

打包体积小。

性能高,Nuitka 可以显著提高 Python 代码的性能,将其编译为二进制格式,可以比解释代码更有效地执行。这可以带来更快的执行时间和更好的资源利用率。

安全性,将 Python 代码编译成二进制格式可以使攻击者更难进行逆向工程或修改代码。

Nuitka 安装和环境

安装

> pip install nuitka
校验是否安装成功:

> python -m nuitka --version
1.7rc4
Commercial: None
Python: 3.9.10 (tags/v3.9.10:f2f3f53, Jan 17 2022, 15:14:21) [MSC v.1929 64 bit (AMD64)]
...

环境

Python:2.6、2.7、3.4、3.5、3.6、3.7、3.8、3.9、3.10 和 3.11 任一版本

C编译器:推荐使用 mingw64。其他的可参考官方文档(https://nuitka.net/de_DE/doc/user-manual.html#requirements)

我当前的环境如下:

> python --version
Python 3.9.10
> gcc --version
gcc.exe (x86_64-win32-seh-rev0, Built by MinGW-W64 project) 8.1.0

Nuitka 打包

第一次使用时会提示下载一个 C 语言缓存工具(以加速重复编译生成的 C 代码)和一个基于 MinGW64 的 C 语言编译器。都输入 yes 即可。

使用一个实际的项目来演示如何打包,项目是:

QtComMate(https://github.com/nixgnauhcuy/QtComMate),基于 pyqt6 的一个串口工具。

项目结构如下:

├─docs
│  ├─images
│  └─translations
└─src
    │  config.py
    │  main.py
    │  main.ui
    │  requirements.txt
    │  resources_rc.py
    │  serialport.py
    │  serialport_combobox.py
    │  Ui_main.py
    │
    └─Resources
        ├─icon
        │      main.ico
        ├─img
        ├─sty
        └─translations
上述我省略了一些无关紧要的文件,可以看出主程序是 ./src/main.py 图标在 ./src/Resources/icon/main.ico 中。

确认了主入口和图标位置后,开始打包,输入下述命令:

> python -m nuitka --mingw64 --standalone --show-memory --enable-plugin=pyqt6 --nofollow-import-to=numpy --nofollow-imports --remove-output --disable-console --windows-icon-from-ico=.\src\Resources\icon\main.ico --output-dir=out  .\src\main.py
等待命令执行完,过程会稍微要点时间,并且会占用大量 CPU 资源,执行完毕后,会在当前目录下输出 out/main.dist 文件夹,这样就打包成功了。


简单运行下,


为了对比一下 pyinstaller,输入下述命令使用 pyinstaller 打包:

> pyinstaller -D -w -i .\src\Resources\icon\main.ico .\src\main.py
pyinstaller 会在当前目录生成 dist 和 build 文件,对比一下两者打包后的大小:


可以看出 Nuitka 会比 pyinstaller 打包后的体积小。

打包命令各参数解析:

> python -m nuitka --mingw64 --standalone --show-memory --enable-plugin=pyqt6 --nofollow-import-to=numpy --nofollow-imports --remove-output --disable-console --windows-icon-from-ico=.\src\Resources\icon\main.ico --output-dir=out  .\src\main.py

--mingw64:在 Windows 上强制使用 MinGW64。

--standalone:启用输出的独立模式。这使你可以将创建的二进制文件传输到其他机器上,而不用使用现有的 Python 安装。这也意味着它将变得很大。

--show-memory:提供内存信息和统计数据。

--enable-plugin:启用的插件。必须是插件名称。

--nofollow-import-to:在打包过程中忽略指定的 Python 软件包。

--nofollow-imports:不导入任何模块。

--remove-output:打包完成后删除 build 目录。

--disable-console:禁用控制台窗口。

--windows-icon-from-ico:可执行文件的图标路径。

--output-dir:打包的输出文件夹路径。

如果要了解其他的命令参数可以输入:

> python -m nuitka --help
Usage: __main__.py [--module] [--run] [options] main_module.py

Options:
  --help                show this help message and exit
  --version             Show version information and important details for bug
                        reports, then exit. Defaults to off.
  --module              Create an extension module executable instead of a
                        program. Defaults to off.

....

以上就是python打包教程(Python 打包工具 Nuitka)的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取