我有这个 .spec 文件,我用它来将 python 项目转换为可执行文件,该命令工作得很好,但是该命令生成一个包含很多文件(其中的可执行文件)的文件夹,但我希望它生成一个独立的可执行文件文件
命令:
pyinstaller main.spec
main.spec 文件:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(
['main.py', 'ui_interface.py', 'utilities.py', 'data.py'],
pathex=[],
binaries=[],
datas=[('MainMenu.ui', '.'), ('style.json', '.'), ('resources_rc.py', '.')],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='D&PO UIB', # Set the name of the executable to "D&PO UIB"
debug=True, # Enable debug output
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=False, # Set console to False to remove the console window
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
onefile=True, # Generate a single executable file # Add the path to your icon file
)
coll = COLLECT(
exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[], # Include the upx_exclude parameter with an empty list
name='D&PO UIB', # Set the name of the executable to "D&PO UIB"
)
正如您所看到的,onefile 参数设置为 True 但仍然没有任何结果,我尝试更改很多参数,并且尝试了 chatgbt 请求的很多方法,但没有一个起作用,它不断生成一个包含大量文件的文件夹。
简单地摆脱你的
COLLECT(...)
声明。这应该可以解决问题。
另请参阅此处 https://pyinstaller.org/en/stable/spec-files.html#spec-file-operation
“COLLECT 的实例从所有其他部分创建输出文件夹。 在单文件模式下,不会调用 COLLECT,EXE 实例会接收所有脚本、模块和二进制文件。”
编辑:
我的猜测:将此行设置为 False (或干脆删除它)以保留二进制文件
exclude_binaries=False
因为排除了所有二进制文件,所以路径上没有 python39.dll。