如何不使用auto-py-to-exe、pyinstaller、nuitka将.py转为.exe并缩减体积?
将Python脚本转换为轻量.exe文件的替代方案
下面是几个避开PyInstaller、auto-py-to-exe、Nuitka(或优化Nuitka)的轻量转换方案,兼顾体积与性能:
方案1:Cython转C再编译为原生exe
Cython可将Python代码编译为C语言,再通过C编译器生成体积极小的原生exe,同时能显著提升运行速度。
- 前置依赖:安装Cython
pip install cython,以及C编译器(推荐MinGW-w64) - 编写
setup.py编译脚本:
from distutils.core import setup from Cython.Build import cythonize setup( ext_modules=cythonize("your_script.py", compiler_directives={'language_level': "3"}), )
- 生成C代码:执行
python setup.py build_ext --inplace,会得到对应的.c文件 - 编译为exe:使用MinGW执行命令(替换XX为你的Python版本号,如3.10对应310)
gcc -o your_script.exe your_script.c -I"C:\PythonXX\include" -L"C:\PythonXX\libs" -lpythonXX
- 注意:需将Python运行时dll(
pythonXX.dll)与exe放在同一目录;若想完全无依赖,需静态编译Python源码(步骤稍复杂)
方案2:Py2exe轻量化打包
Py2exe的默认输出体积远小于PyInstaller,通过配置可进一步精简:
- 安装Py2exe:
pip install py2exe - 编写
setup.py:
from distutils.core import setup import py2exe setup( console=["your_script.py"], # 若为GUI程序则用windows=["your_script.py"] options={ "py2exe": { "bundle_files": 1, # 合并为单个exe "compressed": True, # 开启压缩 "optimize": 2, # 代码全优化 "excludes": ["tkinter", "unittest", "email", "ssl"], # 排除未使用的标准库模块 "dll_excludes": ["w9xpopen.exe", "msvcr100.dll"] # 排除冗余系统dll } }, zipfile=None # 将库文件合并到exe,不生成单独zip )
- 执行打包:
python setup.py py2exe,生成的exe在dist目录下
方案3:Nuitka极致优化配置(可选尝试)
若之前仅用了Nuitka默认配置,可通过以下参数大幅缩小体积并提升速度:
- 编译命令:
python -m nuitka --standalone --onefile --optimize=3 --plugin-enable=upx --remove-output --your_script.py
- 参数说明:
--optimize=3开启最高级代码优化,--plugin-enable=upx用UPX压缩最终exe,--onefile打包为单文件,能有效降低体积并提升运行效率
内容的提问来源于stack exchange,提问作者rustam-cpp
相关产品推荐
相关产品推荐

