使用 PyInstaller 打包 Python 程序时 -F 与 -D的区别。
2025-08-03 17:48:15 8 分享链接 开发笔记 python pyinstaller
在使用 PyInstaller 打包 Python 程序时,-F
和-D
是两个常用的打包模式参数,主要区别如下:
添加外部文件区别:
参数 | 适用文件类型 | 处理方式 |
---|---|---|
--add-data | 文本类资源(非二进制文件) | 会被当作“数据文件”处理,打包后可通过 sys._MEIPASS 路径访问 |
--add-binary | 二进制文件(可执行文件/库) | 会被当作“二进制组件”处理,逻辑上更贴近程序依赖的可执行文件或动态链接库 |
1. -F
(或 --onefile
):单文件模式
- 打包结果:将所有代码、依赖库、资源文件等全部打包到一个独立的可执行文件(例如
text_to_speech.exe
)。 - 运行方式:运行时,程序会先将内部资源解压到系统临时目录(如 Windows 的
%TEMP%
),再执行。 优点:
- 输出文件单一,方便分发(只需传递一个 EXE 文件)。
- 对用户更友好,无需处理多个文件。
缺点:
- 启动速度较慢(需要先解压资源)。
- 无法直接查看或修改内部依赖文件(如配置、资源等)。
- 若程序依赖外部 EXE 或动态库(如
edge-tts.exe
),需通过--add-data
打包,且运行时需从临时目录读取(需用sys._MEIPASS
获取路径)。
2. -D
(或 --onedir
,默认模式):单目录模式
- 打包结果:将程序及所有依赖打包到一个文件夹中,文件夹内包含主程序 EXE、依赖库(
.pyd
、.dll
等)、资源文件等。 - 运行方式:直接运行文件夹中的主程序 EXE 即可,无需解压(资源文件直接存放在文件夹中)。
优点:
- 启动速度快(无需解压步骤)。
- 可直接查看或修改文件夹内的依赖文件(如配置、资源)。
- 适合依赖较多外部文件(如
edge-tts.exe
)的程序,文件结构清晰。
缺点:
- 分发时需传递整个文件夹,不如单文件简洁。
- 文件夹体积较大,包含大量依赖文件。
如何选择?
- 若你的程序(如
text_to_speech.py
)依赖外部 EXE(如edge-tts.exe
)或需要频繁修改配置/资源,优先用-D
,方便管理文件路径。 - 若追求分发便捷性(如仅需分享一个文件),且能接受稍慢的启动速度,可用
-F
,但需确保代码中正确处理sys._MEIPASS
路径(如之前提到的get_exe_path
方法)。
示例命令
# 单文件模式
pyinstaller -F -w text_to_speech.py --add-data "tools/edge-tts.exe;."
# 单目录模式(默认,可省略 -D)
pyinstaller -D -w text_to_speech.py --add-data "tools/edge-tts.exe;."
详细介绍一下用 pyinstaller -D 这个参数的用法
pyinstaller -D
是 PyInstaller 中常用的参数组合,主要用于将 Python 脚本打包为目录模式的可执行程序。下面详细介绍其用法和特点:
1. 基本含义
-D
是--onedir
的缩写,是 PyInstaller 的默认参数(不指定时默认使用此模式)。- 作用:将 Python 脚本打包为一个包含多个文件的目录,而非单个可执行文件。
2. 使用语法
基本命令格式:
pyinstaller -D [其他参数] 脚本文件名.py
示例:
# 将 main.py 打包为目录模式
pyinstaller -D main.py
3. 打包结果
执行命令后,会生成以下内容:
dist 目录:包含一个与脚本同名的子目录(如
dist/main/
),里面有:- 可执行文件(如
main.exe
或main
) - 依赖的动态链接库(
.dll
、.so
等) - Python 解释器相关文件
- 其他资源文件(如脚本中引用的图片、配置文件等)
- 可执行文件(如
- build 目录:存放打包过程中的临时文件(可删除)
- xxx.spec 文件:打包配置文件(可用于高级定制)
4. 特点与适用场景
优点:
- 打包速度快:相比单文件模式(
-F
),无需压缩整合所有文件,耗时更短。 - 启动速度快:运行时无需解压文件,直接加载目录中的资源,启动更快。
- 便于调试:可直接查看依赖文件,方便排查缺失模块或资源的问题。
- 适合大型项目:对于依赖复杂、体积较大的项目,目录模式更稳定。
缺点:
- 分发不便:需要将整个目录传递给用户,而非单个文件。
- 目录结构复杂:用户可能误删目录中的关键文件导致程序无法运行。
适用场景:
- 开发阶段的测试打包
- 内部工具或企业级应用(无需严格限制分发形式)
- 依赖较多第三方库或资源文件的项目
5. 常用组合参数
结合其他参数可实现更灵活的打包:
# 目录模式 + 不显示控制台窗口(Windows)
pyinstaller -D -w main.py
# 目录模式 + 指定程序图标 + 自定义输出目录
pyinstaller -D -i icon.ico --distpath ./output main.py
# 目录模式 + 排除不必要的模块
pyinstaller -D --exclude-module pandas main.py
6. 与 -F
参数的区别
特性 | -D (目录模式) | -F (单文件模式) |
---|---|---|
输出形式 | 多文件目录 | 单个可执行文件 |
打包速度 | 快 | 慢(需压缩整合) |
启动速度 | 快 | 慢(需解压到临时目录) |
适用场景 | 大型项目、调试、内部使用 | 简单脚本、对外分发(便捷性优先) |
通过 -D
参数,你可以快速生成一个结构清晰、易于调试的可执行程序目录,适合大多数开发和内部使用场景。
最近更新
- 2025-08-03 17:50
- pyinstaller --onefile --windowed 与 pyinstaller -F -w的区别
- 2025-08-03 17:39
- 使用 PyInstaller 打包 Python 程序时 隐藏调用其它程序的命令窗口。
- 2025-08-03 11:04
- 使用 PyInstaller 打包 Python 程序时 -F 与 -D的区别。
- 2025-08-01 15:15
- 通过Edge-tts生成的中文字幕如何自然断句?
- 2025-07-31 18:23
- Edge-tts库 命令行工具有哪些常用参数?
- 2025-07-29 01:43
- 豆包连环画生成提示(优化版)
- 2025-07-28 13:20
- 镜头运动手法:不止推拉,这些技巧让画面更有张力。
- 2025-07-28 13:13
- 摄影与剪辑是视频创作的两个核心环节,二者共同决定了作品的最终呈现效果。
- 2025-07-23 16:35
- 在Python中如何获取脚本所在的目录?
- 2025-07-23 01:09
- Edge-tts库一次支持多少个中文,语速支持设置吗?