当前位置:首页>python>Python工程打包exe选PyInstaller还是Nuitka?看这篇就够了!

Python工程打包exe选PyInstaller还是Nuitka?看这篇就够了!

  • 2026-10-21 13:28:42
Python工程打包exe选PyInstaller还是Nuitka?看这篇就够了!

点击上方"蓝字",关注"Python当打之年"

后台回复"1",领取众多Python学习资料
大家好,我是欧K~
将Python项目打包成可执行文件(EXE)是分发应用程序的常见需求,特别是面向没有Python环境的Windows用户。
本期详细介绍一下PyInstaller和Nuitka进行打包的方法,希望对大家有所帮助,如有疑问或者需要改进的地方可以联系小编。
1 PyInstaller(最常用)
特点:
  • 易用性:直接打包Python脚本为独立可执行文件,无需修改代码。
  • 跨平台:支持Windows、macOS、Linux(但exe仅限Windows)。
  • 依赖处理:自动分析依赖(包括隐藏导入),支持数据文件(如图片、配置)的打包。
  • 输出:生成单个exe或带依赖的文件夹,体积较大(因包含解释器和库)。
  • 反编译风险:生成的exe可被反编译,需配合代码混淆增强安全性。

适用场景:

  • 快速打包小型工具或内部使用程序。
  • 目标用户环境复杂,需兼容旧版Python或第三方库。
  • 不追求极致性能或启动速度。

1.1 安装 PyInstaller

pip install pyinstaller

升级最新版:

pip install --upgrade pyinstaller

1.2 基本用法

将 Python 脚本打包为可执行文件:

pyinstaller main.py

生成的文件默认位于 dist/ 目录下,包含:一个可执行文件(如 main.exe);依赖的动态链接库(.dll、.so 等);其他资源文件(如图片、数据文件)。

1.3 常用参数

  • -F / --onefile

将所有依赖打包成单个可执行文件(默认生成多个文件)

pyinstaller --F main.py
  • -D / --onedir

生成一个目录(默认行为),包含可执行文件和依赖(与 --onefile 互斥)

  • -n NAME / --name=NAME

指定生成的可执行文件名称(默认使用脚本名)

pyinstaller -n MyApp main.py
  • -w / --windowed / --noconsole

隐藏命令行窗口(适用于 GUI 应用)

pyinstaller -w main.py
  • --icon=ICON.ico

设置可执行文件的图标(仅 Windows/macOS)

pyinstaller --icon=logo.ico main.py
  • --add-data="SRC;DEST"

添加额外文件或目录(格式因平台而异,注意 ; 和 : )

# Windows:pyinstaller --add-data "data.txt;." main.py# Linux/macOS: pyinstaller --add-data "data.txt:." main.py
  • --exclude-module=MODULE

排除不需要的模块(减少体积)

pyinstaller --exclude-module=numpy main.py
  • --hidden-import=MODULE

强制包含未被自动检测到的模块

pyinstaller --hidden-import=pandas main.py
  • --version-file=FILE
设置版本信息文件(.rc 或 .exe.manifest)
pyinstaller --version-file=version.rc main.py
  • --debug
启用调试模式(保留更多中间文件)
pyinstaller --debug main.py
  • --clean
清理临时文件和缓存后再打包
pyinstaller --clean script.py
常用示例:
pyinstaller -F -w --icon=app.ico --add-data "config.ini;." main.py

1.4 其他用法

PyInstaller 生成 .spec 文件后,可手动编辑以自定义打包行为。例如:
# main.spec 示例block_cipher = Nonea = Analysis(    ['main.py'],    pathex=['/path/to/script'],    binaries=[],    datas=[('data.txt', '.')],    hiddenimports=['pandas'],    hookspath=[],    runtime_hooks=[],    excludes=[],    win_no_prefer_redirects=False,    win_private_assemblies=False,    cipher=block_cipher,    noarchive=False,)pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)exe = EXE(    pyz,    a.scripts,    a.binaries,    a.zipfiles,    a.datas,    [],    name='MyApp',    debug=False,    bootloader_ignore_signals=False,    strip=False,    upx=True,    upx_exclude=[],    runtime_tmpdir=None,    console=True,    icon='logo.ico',)
重新打包:
pyinstallermain.spec
2 Nuitka(高性能/防反编译)

特点:

  • 编译为二进制:将Python代码转为C/C++后编译为原生机器码,性能接近原生应用。
  • 安全性:反编译难度高(需逆向工程二进制文件)。
  • 体积优化:依赖系统库,输出文件较小(尤其单文件模式)。
  • 兼容性:支持Python 3.5+,但需安装匹配的C编译器(如MSVC、MinGW)。
  • 复杂度:需处理编译错误(如C扩展兼容性问题)。

适用场景:

  • 对性能敏感的应用(如游戏)。
  • 需要高安全性的商业软件。
  • 追求更小的分发体积和更快的启动速度。

2.1 安装Nuitka

pip install nuitka

升级最新版:

pip install --upgrade nuitka

2.2 基本用法

将 Python 脚本打包为可执行文件:

nuitka main.py

生成的文件默认和.py代码同路径。

2.3 常用参数

  • --onefile
将所有文件打包成一个单独的可执行文件
nuitka --onefile main.py
  • --standalone
生成独立的可执行文件,包含所有依赖
nuitka --standalone main.py
  • --windows-console-mode=disable
隐藏控制台窗口(适用于 GUI 程序)
nuitka --windows-console-mode=disable main.py
  • --windows-icon=app.ico
设置 EXE 图标(需 .ico 格式)
nuitka --windows-icon-from-ico=logo.ico main.py
  • --enable-plugin=tk-inter /pyqt5/numpy
启用 GUI 插件支持(如 Tkinter/PyQt)
nuitka --enable-plugin=tk-inter main.py
  • --include-package=numpy,requests
显式包含动态导入的库
nuitka --include-package=numpy,requests --standalone main.py
  • --include-data-dir=project/data=data
将 project/data 目录打包到可执行文件中,并在运行时映射为 data 目录
nuitka --include-data-file=./config.json=./config.json main.py
  • --output-dir=output
指定输出目录为output
nuitka --output-dir=output main.py
  • --jobs=N
多线程编译加速(根据 CPU 核心数调整)
nuitka --jobs=8 main.py
  • --lto=yes/no
启用链接时优化(提升运行效率)
nuitka --lto=yes main.py
  • --windows-company-name=NAME
设置名称(元数据)
nuitka --windows-company-name="MyApp" main.py
  • --debug
查看详细调试信息
nuitka --debug main.py
常用示例:
nuitka --standalone --onefile --enable-plugin=pyqt5 --windows-console-mode=disable --windows-icon-from-ico="logo.ico" main.py
因地制宜,根据场景灵活变通选择合适的打包方式:
  • 新手/快速原型开发:直接选 PyInstaller,优先验证功能可行性。
  • 性能敏感型项目:尝试 Nuitka,但需预留时间解决兼容性问题(如 ctypes 调用、多线程优化)。
3. 更多内容

源码下载 | 【01-50】Pthon可视化系列文章资源(源码+数据)

👉 公众号后台回复【可视化项目源码】获取更多可视化代码+数据
END

以上就是本期为大家整理的全部内容了,喜欢的朋友可以点赞、点在看,也可以分享让更多人知道。

往期推荐

源码下载 | 【01-50】Pthon可视化系列文章资源(源码+数据)

可视化系统04 | 基于Python的房天下网房屋数据分析预测系统

可视化系统03 | 招聘数据分析可视化系统+数据库案例

可视化系统02 | 微博舆情数据分析系统+数据库案例

可视化系统01 | 豆瓣电影Top250数据分析系统+数据库案例

爬虫 | Python爬取某平台杭州二手房数据

爬虫 | Python搞定软科中国大学排名

爬虫 | Python爬取胡润百富榜数据

爬虫 | Python爬取微博实时热搜榜信息

爬虫 | Python爬取B站榜排行榜信息

66  | 2025年世界500强数据分析可视化

65 | 山东省2025年高考志愿投档数据分析可视化

64 | 全国瑞幸咖啡VS星巴克门店数据分析可视化

63 | 泡泡玛特微博热搜评论数据分析可视化

62 | 智联招聘大数据岗位数据分析可视化

61 | 基于Apriori算法及帕累托算法的超市销售数据分析可视化

60 | 箱包订单数据分析可视化

59 | 淘宝华为手机商品数据分析可视化

58 | 大众点评餐饮数据分析可视化

57 | 交通事故数据分析可视化

56 | 2024年中国500强企业数据分析可视化分析可视化

55 | 实习僧网Python岗位招聘数据分析可视化

54 | 2024年美国总统大选数据分析可视化

53 | 基于Lasso回归和随机森林的上海链家二手房房价预测

53 | 上海链家二手房数据分析可视化

52 | 基于KNN近邻和随机森林模型对用户转化进行分析与预测

51 | 深圳市共享单车数据分析可视化

01-50 | Pthon可视化系列文章资源(源码+数据)

Pandas+Pyecharts | 全国热门旅游景点数据分析可视化

可视化 | 再分享一套Flask+Pyecharts可视化模板二

可视化 | 分享一套Flask+Pyecharts可视化模板

可视化 | Python直观展示中国代表团冬奥会荣耀时刻

Matplotlib | 世界足球俱乐部排名可视化

点【在看】的您又变好看了呢

最新文章

随机文章