【发布时间】:2018-05-08 04:46:43
【问题描述】:
我的 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')
所以我遇到了问题,我将使用来自 pip 的最新版本的 PyInstaller 编译我的 PyQt5 5.8.2(使用 Python 3.6.1)程序,它可以工作!静态链接的 onefile 可执行文件在我的计算机上运行,上面包含所有 Qt 内容。
然后我在尚未设置 Qt 环境的任何计算机或虚拟机上对其进行测试,但由于“找不到或加载 Qt 平台插件'windows'”错误,它在启动时崩溃。如果您查看规范,您会注意到我试图手动将 DLL 存储在二进制列表中,以便 PyInstaller 将其存储在可执行文件中,但这不起作用。
我想知道我需要改变什么,这样我就可以编译我的应用程序,而不必执行诸如将平台文件夹包含在可执行文件的文件夹中(我希望所有内容都在可执行文件中),会不会就像更改我没有意识到的规范文件一样简单,以便将 DLL 存储在可执行文件中?
顺便说一句,这不是重复的。我查看了其他一些问题,所有这些问题要么针对不同类型的应用程序,要么解决方案是降级或将 DLL 存储在文件夹中,而我不能做任何一个。
编辑:所以我将其更改为 onedir 只是为了查看它是否在其中,并且 qwindows.dll 在文件夹内。还有一个 qt5_plugins 文件夹,其中有一个平台文件夹,该文件夹也有一个 qwindows.dll。那它是怎么检测不到dll的呢??
【问题讨论】:
-
您可以尝试在 pathex 变量中添加这些库的路径
-
刚刚尝试通过更改为 pathex=['C:\\Users\\admin\\compile', 'C:\\Python361\\Lib\\site-packages\\PyQt5\\ Qt\\plugins\\platforms'],没有改变任何东西
-
还有@The4thIceman,如果重要的话,我会在干净的虚拟机上执行此操作
-
我发现了一个重要的细节,所以我编辑了这个问题。
标签: python-3.x qt pyqt5 pyinstaller static-linking