python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python打包编译Pyinstaller与Nuitka

Python打包编译工具Pyinstaller与Nuitka特性超详细对比

作者:24K纯学渣

应用程序开发完毕,一般都需要对程序进行打包后发布,除开源项目外,很少有发布源码的,这篇文章主要介绍了Python打包编译工具Pyinstaller与Nuitka特性对比的相关资料,需要的朋友可以参考下

概要

当我们发布Python项目时,有时为了隔离运行环境的差异 或者 不希望以源码的形式发布,一种常用的方法是将Python项目打包/编译成二进制文件(更具体的讨论在Python项目加密 中),打包编译的工具有很多,其中PyInstaller 和 Nuitka 是目前最主流的两个工具。它们都能将 .py 文件打包成无需安装 Python 环境即可运行的二进制程序,但其底层机制、性能表现和适用场景存在显著差异。

结合实际的项目实践,本文从功能原理、特性异同、性能对比及实际选型建议等 详细对比 PyInstaller 与 Nuitka 的核心特性,供有需要的伙伴参考以项目需求做出更合理的技术选型。

简介

Pyinstaller

PyInstaller 是一个流行且成熟的 Python 打包工具,能Python 脚本及其依赖项(包括解释器、标准库、第三方包等)封装成单个可执行的二进制文件或目录结构。它通过分析字节码来静态追踪导入关系,并将所有必要资源捆绑到运行时环境中。

Nuitka

Nuitka (读作 努伊特卡) 是一个 真正意义上的Python 编译器,它将 Python 代码转换为优化的 C / C++ 代码,再通过gcc/msvc等编译链编译链接成可执行文件。

Python项目

提供一个Python Project,Python项目 SLOC (一个衡量项目源码量的指标——源码行数,统计时会刨除文档注释、空行、虚拟环境、非.py文件等无效因素影响) 2700+,属于中小型项目(一般代码量处于 1000~10000 的Python Project划分为中型项目),不含GUI相关依赖,文件结构形如:

| -- main.py				# 项目入口文件
| -- settings.py      		# 项目运行设置
| -- framework              # 项目核心
| -- basic					# 项目基础文件
| -- release				# 发布
| -- scripts				# 其他脚本
| -- cis				    # CI/CD相关
| -- venv				    # 项目虚拟环境

打包命令分别为:

# 执行下述命令前先cd到项目根目录下,并激活虚拟环境
# pyinstaller 与 nuitka 的安装均通过pip install直接安装即可,以Windows平台为例

# Pyinstaller
# 打包成单文件
pyinstaller -F main.py --workpath .\release\build --distpath .\release\output --clean --specpath .\release\windows
# 打包成单目录
pyinstaller -D main.py --workpath .\release\build --distpath .\release\output --clean --specpath .\release\windows
# ps: pyinstaller更常用的一种打包方式是指定.spec文件打包

# Nuitka
# 打包成单文件
nuitka --onefile --windows-console=disable --follow-imports --output-dir=.\release\output --clean-cache=all --lto=yes main.py
# 打包成单目录
nuitka --standalone --windows-console=disable --follow-imports --output-dir=.\release\output --clean-cache=all --lto=yes main.py
# nuitka 在打包时支持指定编译相关的特性,比pyinstaller更灵活

特性剖析

相同点

差异点

最后来张对比图:

场景选型

总之,如果更注重高性能、安全性、防逆向、运行时资源消耗小、商业化,优选nuitka;如果追求快速迭代、生态成熟稳定、兼容性好,优选pyinstaller。

总结

PyInstaller 与 Nuitka 代表了 Python 打包领域的两种哲学:

技术选型没有银弹,只有最适合业务场景的选择。理解工具本质,方能游刃有余。

到此这篇关于Python打包编译工具Pyinstaller与Nuitka特性超详细对比的文章就介绍到这了,更多相关Python打包编译Pyinstaller与Nuitka内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文