我的 PyInstaller 规范:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['test.py'],
pathex=['C:\\Users\\admin\\compile'],
binaries=[('C:\\Python361\\Lib\\site-packages\\PyQt5\\Qt\\plugins\\platforms\\qwindows.dll', 'qwindows.dll')],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='test',
debug=False,
strip=False,
upx=False,
runtime_tmpdir=None,
console=False , icon='icon.ico')
我遇到了问题,我用PyQt5 5.8.2(Python 3.6.1)编写的程序可以使用最新版本的pip安装的PyInstaller进行编译,并且可以在我的计算机上工作。静态链接的单文件可执行文件可以在我的电脑上正常运行。
但是,在任何没有设置Qt环境的计算机或虚拟机上测试它时,它在启动时崩溃,因为出现了“找不到或加载Qt平台插件“windows””错误。如果您查看spec文件,您会注意到我尝试手动将DLL存储在二进制列表中,以便PyInstaller将其存储在可执行文件中,但这并没有起作用。
我想知道需要更改什么,以便我可以编译我的应用程序,而无需像在可执行文件夹中包含平台文件夹那样做一些事情(我希望所有东西都在可执行文件中),难道只需改变spec文件中的某些内容,使其将DLL存储在可执行文件中?
顺便说一句,这不是重复的问题。我看了其他一些问题,但它们要么是针对不同类型的应用程序,要么解决方案是降级或将DLL存储在文件夹中,我都不能这样做。
编辑:所以我将其更改为onedir,只是为了看看它是否在里面,qwindows.dll位于文件夹内。还有一个名为qt5_plugins的文件夹,其中包含一个平台文件夹,该文件夹也包含一个qwindows.dll。所以它为什么无法检测到dll?