跳转到内容

PyInstaller

PyInstaller 是将 Python 项目打包为独立可执行文件(如 Windows 的 .exe 或 Linux 的二进制文件)的利器。它使用户能够在 未安装 Python 环境 的机器上直接运行该程序。

官方文档:PyInstaller Documentation


2. 核心机制:冻结与捆绑 (Freeze/Bundle)

Section titled “2. 核心机制:冻结与捆绑 (Freeze/Bundle)”

PyInstaller 并不是编译器(它不会将 Python 代码转译为底层的 C 或机器语言)。它的核心机制是:

  1. 分析依赖:扫描项目中所有的 import,找到依赖的纯 Python 库、动态链接库 (.dll/.so)。
  2. 字节码转化:将你的 *.py 源码全部转化为 *.pyc 字节码。
  3. 捆绑打包:将 Python 虚拟机(解释器)、运行所需的依赖库以及上述字节码,全部打包塞进一个自解压的包中。运行时,它会将自身解压到系统的临时目录,然后利用内置的解释器去执行字节码。

因为 PyInstaller 本质上只做了“打包隐藏”,其生成的执行文件非常容易被 pyinstxtractor 等逆向工具解包并提取出原始的 .pyc 字节码,进而被反编译为源码。

对于追求 极高商业源码保护极致执行性能 的项目,必须考虑引入 C 级别的编译工具:

评估特性📦 PyInstaller (打包器)🚀 Nuitka (全程序编译器)🔬 Cython (核心模块编译器)
底层工作原理冻结 / 资源捆绑 (Freeze)将 Python 代码转译为 C++ 并编译成原生机器码转译为 C 并编译成原生机器码
最终交付产物独立可执行文件 (内置解释器+字节码)独立可执行文件 (原生机器码).so / .pyd 扩展模块 (需 Python 解释器加载)
源码保护级别中等。极易被拆包提取字节码并反编译。高级。剥离了 Python AST,极难被还原为人类可读源码。最高级。彻底化为 C 扩展,专用于保护核心机密算法。
执行性能提升(甚至因启动解压而变慢)。显著提升 (特别是在 CPU 密集型任务上)。最大化提升
工程易用性最高,开箱即用,打包速度极快。,需要配置 C 编译器环境,全项目编译极度耗时。最低,通常只对核心的数个 .py 文件进行部分编译混用。