python nuitka 打包方法介绍
python nuitka 打包方法介绍
摘要
python 文件打包是指将写好的代码打包生成可执行文件,使python 代码在没有python环境的电脑上也可运行。本文介绍了在windows下nuitka 的安装使用。通过与pyinstall 打包的比较证明了使用nuitka 打包代码,可以让可执行文件更安全、更小、运行速度更快的优点。在想减少打包文件体积不考虑打包时间的情况下 nuitka 是个很好的选择。
目前已有较为详细的教程来介绍 nuitka,但对于入门的小白来说具体的操作步骤貌似还不够详细,但[官方文档](Nuitka 用户手册 — Nuitka the Python Compiler 文档)太多看不懂,所以本文从 nuitka 下载安装,环境安装,命令介绍使用,及常用命令入手,介绍nuitka。
安全性
Nuitka 将 Python 模块翻译成 C 级程序,然后使用 libpython
和自己的静态 C 文件,以 CPython 的方式执行。pyinstaller 即使使用 –key 命令进行加密也不安全,目前已有 反编译方式。因此nuitka 安全性更好。
文件大小及打包时间测试
代码编写
以我之前写的代码为例,hecoter/hm3u8dl_cli ,改代码运行要求:python version ≥ 3.10,对 hm3u8dl_cli/cli.py
进行打包测试。
import time,os
def calTime(func):
""" 装饰器 计算函数运行时间
:param func: 函数
:return: 函数
"""
def wrapper(*args, **kwargs):
startTime = time.time()
result = func(*args, **kwargs)
endTime = time.time()
print(f'{func.__name__} 耗时{endTime - startTime}s')
return result
return wrapper
@calTime
def package_pyinstaller():
cmd = 'pyinstaller -F cli.py'
os.system(cmd)
@calTime
def package_nuitka():
cmd = 'nuitka --standalone --remove-output --mingw64 --onefile --enable-plugin=multiprocessing cli.py'
os.system(cmd)
# package_pyinstaller()
package_nuitka()
文件大小
pyinstaller:30.6 MB
nuitka: 11.9 MB
打包时间
package_pyinstaller 耗时32.256619930267334s
package_nuitka 耗时514.7898192405701s
文件大小 | 打包时间 | |
---|---|---|
pyinstaller | 30.6 MB | 32.3 s |
nuitka | 11.9 MB | 8 min 34.8 s |
根据测试得nuitka 在打包后的文件大小上比 pyinstaler 小了61%,耗时大幅度延长,因此在想减少打包文件体积不考虑打包时间的情况下 nuitka 是个很好的选择。
nuitka 安装及环境配置
在终端中依次运行如下代码
- pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
- python.exe -m pip install –upgrade pip
- pip install wheel
- pip install nuitka
- pip install zstandard
- pip install ordered-set
- 进入要打包的文件所在文件夹,运行 nuitka –standalone –remove-output –mingw64 –onefile –enable-plugin=multiprocessing cli.py
- https://github.com/brechtsanders/winlibs_mingw/releases/download/11.3.0-14.0.3-10.0.0-msvcrt-r3/winlibs-x86_64-posix-seh-gcc-11.3.0-llvm-14.0.3-mingw-w64msvcrt-10.0.0-r3.zip 找github下载加速服务(Github下载加速-在线工具箱 (mintimate.cn))将解压后的 mingw64文件放到提示的目录 C:\Users\happy\AppData\Local\Nuitka\Nuitka\gcc\x86_64\11.3.0-14.0.3-10.0.0-msvcrt-r3
- 配置完成后重新执行打包命令: nuitka –standalone –remove-output –mingw64 –onefile –enable-plugin=multiprocessing cli.py ,根据提示输入 yes
- 等待打包完成!
参数介绍
–standalone 保证能在另一台机器运行
–onefile 生成单个可执行文件
–windows-icon-from-ico=./favicon.ico 文件logo
打包常用命令可为:
nuitka --standalone --remove-output --mingw64 --onefile
--enable-plugin=multiprocessing --windows-icon-from-ico=./favicon.ico
main.py
更多命令可参考官方文档:Nuitka 用户手册 — Nuitka the Python Compiler 文档
赞赏
微信赞赏支付宝赞赏