我为同样的问题写了一个类似的答案,因为我也一直在努力解决这个问题。就像您一样,我尝试设置环境路径并复制文件夹(这有效,但必须再次手动完成。如果您查看生成的 .spec 文件的顶部,您会看到 mode: python 这样给了我一个如下所示:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
pf_foldr='C:\\Users\\Gabryxx7\\anaconda3\\envs\\<env_name>\\Library\\plugins\\platforms\\'
a = Analysis(['C:\\Users\\Gabryxx7\\PycharmProjects\\<proj_name>\\program.py'],
pathex=['C:\\Users\\Gabryxx7\\PycharmProjects\\<proj_name>\\'],
binaries=[(pf_foldr+'qwindows.dll', 'platforms\\qwindows.dll'),
(pf_foldr+'qdirect2d.dll', 'platforms\\qdirect.dll'),
(pf_foldr+'qoffscreen.dll', 'platforms\\qoffscreen.dll'),
(pf_foldr+'qwebgl.dll', 'platforms\\qwebgl.dll')
],
datas=[],
hiddenimports=['GUI', 'API', 'Threading', 'ssl', 'pyodbc'],
hookspath=[],
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,
a.binaries,
a.zipfiles,
a.datas,
[],
name='programName',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True ) # False to avoid the console
这是--one-file 规范的示例。正如文档上所说:https://pyinstaller.readthedocs.io/en/stable/spec-files.html
在单文件模式下,没有对 COLLECT 的调用,并且 EXE 实例
接收所有脚本、模块和二进制文件。
对于二进制文件,每个二进制文件应该是一个包含两个值的元组:
第一个字符串指定文件或文件,因为它们在此
现在系统。第二个指定要包含的文件夹的名称
运行时的文件。