首先使用pyinstaller生成spec文件,然后配置spec文件重新打包
pyinstaller -D app.py
pyinstaller参数
-F :打包单个文件
-D :打包多个文件,在dist中生成很多依赖文件
-c:使用控制台执行,只对windows有效
-n : 生成spec文件的名字和exe名字
-p : 设置导入路径
-key : 用于加密python字节码的密钥
--add-data 可以将一些非二进制文件添加到exe打包
--dispath :指定打包后程序的存放目录
--workpath :输出所有临时文件存放目录,默认存放在build目录
# -*- mode: python ; coding: utf-8 -*-block_cipher=None
py_files=['game.py'] #所有的python脚本文件
add_files=[
('resources\\fonts\\MONACO.TTF','resources\\fonts'),
('resources\\images\\game_over.gif','resources\\images')
]a = Analysis(py_files, #此列表存放项目设计所有python脚本文件pathex=['E:\Desktop\Games-master\Tetris'],#此列表为项目绝对路径binaries=[],datas=add_files, #此列表存放所有资源文件,每个文件都是一个二元组元素hiddenimports=[],hookspath=[],hooksconfig={},runtime_hooks=[],excludes=[],cipher=block_cipher,noarchive=False,)
pyz = PYZ(a.pure)exe = EXE(pyz,a.scripts,[],exclude_binaries=True,name='game',debug=False,bootloader_ignore_signals=False,strip=False,upx=True,console=True,disable_windowed_traceback=False,argv_emulation=False,target_arch=None,codesign_identity=None,entitlements_file=None,
)
coll = COLLECT(exe,a.binaries,a.datas,strip=False,upx=True,upx_exclude=[],name='game',
)
spec配置说明
a: Analysis类的实例,传入各种脚本来分析程序的导入和依赖。a中的内容包括四部分:scripts,python脚本;pure,程序代码文件中的纯Python模块;binaries,程序代码文件中需要的非python模块;datas,非二进制文件
pyz: 包含所有的python模块
exe:用来生成最后的exe可执行程序
coll: COLLECT类的实例,用于创建输出目录。-F模式下,没有COLLECT,所有的脚本、模块
二进制文件都包含在最终生成的exe文件中
block_cipher: 加密密钥
Analysis参数说明:
- scripts:一个包含要打包的 Python 脚本文件路径的列表。这些脚本文件将被分析并打包到最终的可执行文件中。
- pathex:一个包含要搜索脚本文件的路径列表。PyInstaller 将在这些路径中查找脚本文件及其依赖项。
- binaries:一个包含要包含在可执行文件中的二进制文件路径的列表。这些二进制文件可以是共享库、插件或其他依赖项。
- datas:一个包含要包含在可执行文件中的非 Python 文件路径的列表。这些文件可以是数据文件、配置文件或其他资源文件。
- hiddenimports:一个包含要隐式导入的模块名列表。这些模块可能不会被 PyInstaller 自动检测到,但它们对于程序的正常运行可能是必需的。
- hookspath:一个包含自定义钩子脚本路径的列表。钩子脚本用于处理特定的包或模块,以便正确地打包它们。
- runtime_hooks:一个包含运行时钩子路径的列表。运行时钩子用于在程序运行时执行特定的操作,例如加载插件或初始化资源。
- excludes:一个包含要从打包过程中排除的模块名列表。这些模块将不会被包含在最终的可执行文件中。
- win_no_prefer_redirects:一个布尔值,指示是否避免使用 Windows 文件重定向。如果设置为 True,则 PyInstaller 将尝试直接访问文件而不是通过重定向来访问它们。
- win_private_assemblies:一个布尔值,指示是否将程序集作为私有副本包含在可执行文件中。如果设置为 True,则每个可执行文件都将包含其依赖项的一个私有副本,以避免与其他程序的冲突。
- cipher:一个用于加密 Python 字节码的密钥。如果提供了密钥,则 PyInstaller 将使用它来加密打包的 Python 脚本,以增加安全性。
- noarchive:一个布尔值,指示是否将 Python 字节码嵌入到可执行文件中。如果设置为 False,则 PyInstaller 将创建一个单独的存档文件来存储字节码,并在运行时加载它。这可以减少可执行文件的大小,但会增加启动时间。
参考:
pyinstaller系列之七:打包各种问题汇总_pyinstaller hidden import not found-CSDN博客
【python第三方库】pyinstaller使用教程及spec资源文件介绍_--hidden-import-CSDN博客
Pyinstaller的Spec文件用法_pyinstaller spec-CSDN博客