快速入门
安装
通过 PyPI 安装
pip3 install pyinstaller
打包
简单来说,打包分为两个步骤:
- 进入你的
程序目录
- 针对你的
Python程序脚本
执行如下命令:
这将会在pyinstaller yourprogram.py
dist子目录
中生成打好的包
。
基本使用
命令行语法
pyinstaller 命令
的语法是:
pyinstaller [选项] 脚本1 [脚本2 …] | spec文件
选项
常规选项
选项 | 说明 |
---|---|
-h, --help | 显示当前这个帮助信息,并退出 |
-v, --version | 显示程序版本信息,并退出 |
--distpathDIR | 指定打包的应用程序所放置的位置(默认: ./dist) |
--workpath WORKPATH | 指定所有临时工作文件(例如: .log 和 .pyz 等等)所放置的位置,.log、.pyz 等等(默认: ./build) |
-y, --noconfirm | 在不提示确认的情况下,替换输出目录(默认: SPECPATH/dist/SPECNAME) |
--upx-dir UPX_DIR | UPX实用程序的路径(默认:搜索执行路径) |
-a, --ascii | 不包括对Unicode编码的支持(默认:如果可用,就会尽可能包括) |
--clean | 在构建之前,清理PyInstaller的缓存,并且移除临时文件 |
--log-level LEVEL | 指定在构建时,控制台消息的详细程度。级别(LEVEL)可能是TRACE、DEBUG、INFO、WARN、ERROR和CRITICAL(默认: INFO)之一 |
输出相关
选项 | 说明 |
---|---|
-D, --onedir | 创建一个包含了一个可执行文件的单目录打包程序(默认) |
-F, --onefile | 创建一个单文件打包的可执行程序 |
--specpathDIR | 存放生成的spec文件的目录(默认:当前目录) |
-n NAME, --name NAME | 要分配给打包应用程序和spec文件的名字(默认:第一个脚本文件的基本名称) |
打包与搜索相关
选项 | 说明 |
---|---|
--add-data <SRC;DEST or SRC:DEST> | 要添加到可执行文件的额外的非二进制文件或目录。路径分隔符是特定于平台的(os.pathsep,即,Windows平台是 “;” ,而对于大多数Unix平台是 “:”)。这个选项可以使用多次 |
--add-binary <SRC;DEST or SRC:DEST> | 要添加到可执行文件的额外的二进制文件。这个选项可以使用多次 |
-p DIR, --paths DIR | 用于导入的搜索路径(类似于使用PYTHONPATH)。允许以 “:” 分隔多个路径,或者多次使用该选项 |
--hidden-import MODULENAME, --hiddenimport MODULENAME | 声明脚本代码中不可见的一个导入。该选项可以使用多次 |
--additional-hooks-dir HOOKSPATH | 用于搜索钩子的额外路径。这个选项可以使用多次 |
--runtime-hook RUNTIME_HOOKS | 定制运行时钩子文件的路径。一个运行时钩子是与可执行文件绑在一起的代码,并且会在任何其他代码或模块之前执行,以设置运行时环境的特定功能。该选项可以使用多次 |
--exclude-module EXCLUDES | 需要忽略的可选模块或包(使用Python名,而不是路径名),就像它没有被找到一样。这个选项可以使用多次 |
--keyKEY | 用于加密Python字节码的密钥 |
生成方式
选项 | 说明 |
---|---|
-d, --debug | 告知引导加载器,让其在初始化和启动打包的应用程序时,发送进度消息。用于诊断缺少导入的问题 |
-s, --strip | Apply a symbol-table strip to the executable and shared libs。(建议不要在 Windows 上使用) |
--noupx | 不要使用UPX(即使它可用),在 Windows 和 *nix 之间的作用不同 |
很少使用的特殊选项
打包
在大多数的简单情况下,将当前目录
设置为你myscript.py 程序
的位置,并执行:
pyinstaller myscript.py
打包过程
PyInstaller
会分析myscript.py
并:
- 将
myscript.spec
写入到与myscript.py
相同的目录中 - 在与
myscript.py
所在的相同目录中创建一个build 目录
(如果不存在的话) - 向
build 目录
中写入一些日志文件(log files)
和工作文件(working files)
- 在与
myscript.py
所在的相同目录中创建一个dist 目录
(如果不存在的话) - 向
dist 目录
中写入myscript 可执行目录
- 在
dist 目录
中,你可以找到你打算分发给用户的已打包好的应用程序(bundled app)
。
打包多个程序脚本文件
通常情况下,在命令行
你只会上声明一个脚本文件
,如果你声明了多个,那么所有的脚本文件
都会被分析,并包含到输出
中。 但是,第一个声明的脚本
提供了spec文件
的名称与可执行目录或文件
的名称。并且,它的代码也是在运行期间(run-time)
第一个被执行的。
关于Spec文件的说明
针对某些特定的用途,你可以通过编辑myscript.spec
的内容来定制。在完成编辑后,你需要向pyinstaller 命令
提供这个spec文件
,而不再是那个脚本
:
pyinstaller myscript.spec
myscript.spec 文件
包含了由pyinstaller
(或pyi-makespec
)以脚本文件
作为参数
运行时所指定的选项
所提供的大部分信息。 在使用spec文件
运行pyinstaller
时,通常不需要指定任何选项
。因为,通过spec文件
构建时,只有少数命令行选项
会起作用。
通过路径指定
你甚至可以通过指定脚本文件路径
或spec文件路径
来运行pyinstaller
,例如:
- 在
Linux/Mac
上:pyinstaller options… ~/myproject/source/myscript.py
- 在
Windows
上:pyinstaller "C:\Documents and Settings\project\myscript.spec"