豆米
65.98 MB · 2025-12-15
PyInstaller 是一个强大的Python应用程序打包工具,它能将你的Python脚本及其所有依赖项(包括解释器、模块、库等)打包成一个独立的可执行文件(如.exe)。用户无需安装Python,双击即可运行!
适用场景:
开发GUI桌面应用(如PyQt、Tkinter、pywebview)
制作小工具或脚本,供非技术人员使用
需要跨Windows、macOS、Linux分发Python程序
安装非常简单,只需一行命令:
pip install pyinstaller
建议在虚拟环境中安装,避免污染全局环境。
我们以一个简单的 pywebview 示例为例:
import webview
if __name__ == '__main__':
webview.create_window('Demo', 'https://pyinstaller.org')
webview.start()
保存为 demo.py,接下来我们开始打包。
pyinstaller demo.py
执行后,会在当前目录生成 dist 文件夹,里面就是打包好的应用程序。你可以将整个 dist 文件夹发给别人使用。
如果你不想发整个文件夹,可以使用 -F 参数:
pyinstaller -F demo.py
这样就会生成一个独立的 .exe 文件,方便分发。
如果你打包的是GUI程序,不希望出现命令行窗口,可以使用 -w 参数:
pyinstaller -F -w demo.py
使用 -i 参数可以指定图标文件(需为 .ico 格式):
pyinstaller -F -w -i logo.ico demo.py
打包后文件太大?最常见的原因是打包了不必要的依赖。
方法一:手动排除冗余模块
例如,使用 pywebview 时,默认会打包 PyQt,导致体积暴增。我们可以手动排除:
pyinstaller -F -w --exclude-module PyQt6 demo.py
从186MB降到13.7MB,效果显著!
方法二:使用独立虚拟环境
如果你不确定哪些模块是冗余的,建议在干净的虚拟环境中打包:
python -m venv myenv
myenvScriptsactivate # Windows
pip install pyinstaller pywebview
pyinstaller -F -w demo.py
这样打包出来的文件只有10MB,更小,也更干净。
如果你的项目有多个 .py 文件,不用担心,PyInstaller 会自动递归分析依赖,并将其一并打包。
例如:
project/
├── demo.py
└── module/
└── asset.py
只需打包主文件:
pyinstaller -F -w demo.py
PyInstaller 会自动识别并打包 asset.py。
如果你的程序使用了外部文件(如图片、HTML、配置文件),可以使用 --add-data 参数:
pyinstaller -F -w --add-data "index.html;." demo.py
需要注意: 在代码中,你需要使用 pathlib 或 sys._MEIPASS 来正确获取资源路径:
import pathlib
folder = pathlib.Path(__file__).parent.resolve()
with open(folder / 'index.html', 'r', encoding='utf-8') as f:
html = f.read()
这样就能在打包后正确读取静态文件了。未正确获取资源路径,可能会报错:FileNotFoundError。
PyInstaller 是Python开发者必备的打包工具,无论是GUI程序、命令行工具,还是带资源文件的项目,它都能胜任。
本文要点回顾:
-F 打包为单文件,-w 隐藏命令行-i 自定义图标--exclude-module 或虚拟环境优化体积--add-data 打包静态资源如果你正在学习Python桌面开发,或希望将自己的脚本分享给他人,PyInstaller 绝对是你的首选工具。
附:资源&参考链接
如果有任何问题,欢迎在评论区留言,唐叔会尽力解答!