J. *_*Doe 6 qt pyinstaller static-linking python-3.x pyqt5
我的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')
Run Code Online (Sandbox Code Playgroud)
所以我遇到了一个问题,我将使用pip的最新版本的PyInstaller编译我的PyQt5 5.8.2(使用Python 3.6.1)程序,并且可以正常工作!静态链接的onefile可执行文件在我的计算机上可以运行所有Qt文件。
但是随后,我在尚未设置Qt环境的任何计算机或虚拟机上对其进行了测试,并且由于“找不到或加载Qt平台插件'windows'”错误而在启动时崩溃。如果您看一下规格,您会发现我尝试将DLL手动存储在二进制列表中,因此PyInstaller会将其存储在可执行文件中,但这没有用。
我想知道我需要更改什么,这样我才可以编译我的应用程序,而不必执行将可执行文件文件夹中的platform文件夹包括在内的操作(我希望所有内容都在可执行文件中),是否会如此简单?我没有意识到规范文件中的更改,以便将DLL存储在可执行文件中?
顺便说一句,这不是重复的。我查看了其他一些问题,所有这些问题要么针对不同类型的应用程序,要么解决方案是将DLL降级或存储在文件夹中,但我不能做任何一个。
编辑:所以我将其更改为onedir只是为了查看它是否甚至在其中,并且qwindows.dll在文件夹内。还有一个qt5_plugins文件夹,其中包含一个Platforms文件夹,其中也包含一个qwindows.dll。那怎么不检测dll呢?
似乎有两种解决方案,第一种对我来说效果很好:
将平台目录复制到可执行文件的目录中。您将在类似或的位置找到平台目录c:\Users\<username>\envs\<environmentname>\Library\plugins\platforms
升级到较新版本的 pyqt: conda install -c anaconda pyqt
小心使用第二个选项:如果您有 conda 环境,请不要尝试使用 pip 进行 pyqt 安装,这可能会破坏您的 conda 安装:https : //github.com/ContinuumIO/anaconda-issues/issues/1970
| 归档时间: |
|
| 查看次数: |
4436 次 |
| 最近记录: |