PyInstaller 是一个用来将 Python 应用程序及其所有依赖项打包成一个可执行程序的工具;用户无需安装 Python 解释器或任何模块即可运行打包的应用程序。
通常我们执行 Python 脚本时,需要有 Python 环境,并要预先安装好需要使用的各个模块;这种情况下把脚本给非专业人士使用时可能造成不便。我们可以将程序连同 Python 环境以及程序运行时所需的依赖项打包到一个单独的 exe 可执行文件中,这样分发程序就变得容易多了;从某种程度上说,还能起到保护程序源码不被泄露的作用。
- 安装 PyInstaller
- PyInstaller 助手(一个图形化工具)
PyInstaller 用法
pyinstaller.exe
命令语法:
pyinstaller [options] scriptfile [scriptfile …] | specfile
只列出 Windows 系统下常用的选项,完整列表请查阅官方文档:
位置参数
scriptfile
要处理的 Python 脚本文件specfile
.spec 文件
常用选项
-h
,--help
显示帮助信息并退出-v
,--version
显示程序的版本信息并退出--distpath DIR
生成的捆绑程序放置路径,默认./dist
--workpath WORKPATH
临时文件的放置路径,默认./build
--clean
在构建之前清理 PyInstaller 缓存并删除临时文件--log-level LEVEL
构建时控制台消息的详细程度LEVEL 可以是 TRACE、DEBUG、INFO、WARN、DEPRECATION、ERROR、FATAL 之一(默认值:INFO)。
-D, --onedir
创建包含可执行文件的单文件夹包(默认)-F, --onefile
创建只有一个文件捆绑的可执行文件--specpath DIR
存储生成规范文件的文件夹(默认:当前目录)-n, --name NAME
分配给捆绑应用程序和规范文件的名称(默认值:第一个脚本的名称)--add-data SOURCE:DEST
包含要添加到应用程序的数据文件或目录参数值应采用
SOURCE:DEST
格式,其中SOUCE
是要收集的文件(或目录)的路径,DEST
是相对于顶级应用程序目录的目标目录,两个路径之间以冒号 (:) 分隔。要将文件放入顶级应用程序目录,请使用.
作为DEST
;此选项可多次使用。--add-binary SOURCE:DEST
要添加到可执行文件中的附加二进制文件参考 --add-data 选项,此选项可多次使用;
-p, --paths DIR
用于搜索导入文件的路径允许使用多个路径,用
:
分隔或多次使用此选项;--hidden-import, --hiddenimport MODULENAME
指定代码中不可见的导入--collect-submodules MODULENAME
收集指定包或模块的所有子模块--collect-data, --collect-datas MODULENAME
收集指定包或模块的所有数据--collect-binaries MODULENAME
收集指定包或模块的所有二进制文件--collect-all MODULENAME
收集指定包或模块的所有子模块、数据文件和二进制文件--exclude-module EXCLUDES
忽略模块或吧包--splash IMAGE_FILE
为应用程序添加一个包含图像 IMAGE_FILE 的启动画面该启动画面可以在解压过程中显示进度;
-c, --console, --nowindowed
打开控制台窗口(默认)-w, --windowed, --noconsole
不提供控制台窗口-i, --icon <FILE.ico or FILE.exe,ID or Image or "NONE">
为生成的 Windows 可执行文件添加图标,默认使用 PyInstaller 的图标;
- FILE.ico:将图标应用于 Windows 可执行文件
- FILE.exe,ID:从 exe 文件中提取指定 ID 的图标。
- Image:如果输入的图像文件格式不符合 ico,PyInstaller 会尝试使用 Pillow 将图标转换为正确的格式(前提是已安装 Pillow)
- NONE:表示不添加任何图标
--version-file FILE
将版本资源从 FILE 添加到生成的 exe 文件--manifest <FILE or XML>
将 manifest 文件添加到生成的 exe 文件
常用示例
将 myscript.py 打包成一个单一的 exe 文件,不使用程序图标:
pyinstaller -F -i NONE d:\myscript.py