PySide2和pyinstaller gui应用程序将无法在某些Windows计算机上运行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PySide2和pyinstaller gui应用程序将无法在某些Windows计算机上运行相关的知识,希望对你有一定的参考价值。
我已经构建了一个小的gui应用程序,使用PySide2作为我的gui框架和PyInstaller来创建一个文件exe文件。
该应用程序在某些PC(Windows 7和10)上运行良好,但是,在其他几台PC上它不会启动 - 显示错误消息:
'致命错误!:无法执行脚本pyi_rth_qt5plugins'
我相信它可能没有捆绑Qt5Gui.dll,Qt5Core.dll和Qt5Widgets.dll,但我不知道如何使用PyInstaller。
有谁知道怎么解决这个问题?
这是我的.spec文件:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['main.py'],
pathex=[],
binaries=[],
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='Application',
debug=True,
strip=False,
upx=True,
runtime_tmpdir=None,
console=True , icon='Images\\Application_icon.ico')
编辑
从cmd和debug = True运行时,这是完整输出。我发现奇怪的一件事是它指的是我开发应用程序的PC(例如File "c:\users\jake\Projects\Application\venv\lib\site-packages\PyInsta
ller\loader\pyimod03_importers.py", line 714, in load_module
),而不是我正在测试的PC并从中得到此错误消息。
[4588] PyInstaller Bootloader 3.x
[4588] LOADER: executable is C:\Users\User\Desktop\Application.exe
[4588] LOADER: homepath is C:\Users\User\Desktop
[4588] LOADER: _MEIPASS2 is NULL
[4588] LOADER: archivename is C:\Users\User\Desktop\Application.exe
[4588] LOADER: Extracting binaries
[4588] LOADER: Executing self as child
[4588] LOADER: set _MEIPASS2 to C:\Users\User\AppData\Local\Temp\_MEI45882
[4588] LOADER: Setting up to run child
[4588] LOADER: Creating child process
[4588] LOADER: Waiting for child process to finish...
[4752] PyInstaller Bootloader 3.x
[4752] LOADER: executable is C:\Users\User\Desktop\Application.exe
[4752] LOADER: homepath is C:\Users\User\Desktop
[4752] LOADER: _MEIPASS2 is C:\Users\User\AppData\Local\Temp\_MEI45882
[4752] LOADER: archivename is C:\Users\User\Desktop\Application.exe
[4752] LOADER: SetDllDirectory(C:\Users\User\AppData\Local\Temp\_MEI45882)
[4752] LOADER: Already in the child - running user's code.
[4752] LOADER: manifestpath: C:\Users\User\AppData\Local\Temp\_MEI45882\Application.exe.manifest
[4752] LOADER: Activation context created
[4752] LOADER: Activation context activated
[4752] LOADER: Python library: C:\Users\User\AppData\Local\Temp\_MEI45882\py
thon36.dll
[4752] LOADER: Loaded functions from Python library.
[4752] LOADER: Manipulating environment (sys.path, sys.prefix)
[4752] LOADER: Pre-init sys.path is C:\Users\User\AppData\Local\Temp\_MEI458
82\base_library.zip;C:\Users\User\AppData\Local\Temp\_MEI45882
[4752] LOADER: sys.prefix is C:\Users\User\AppData\Local\Temp\_MEI45882
[4752] LOADER: Setting runtime options
[4752] LOADER: Bootloader option: pyi-windows-manifest-filename Folder Hatcher.e
xe.manifest
[4752] LOADER: Initializing python
[4752] LOADER: Overriding Python's sys.path
[4752] LOADER: Post-init sys.path is C:\Users\User\AppData\Local\Temp\_MEI45
882\base_library.zip;C:\Users\User\AppData\Local\Temp\_MEI45882
[4752] LOADER: Setting sys.argv
[4752] LOADER: setting sys._MEIPASS
[4752] LOADER: importing modules from CArchive
[4752] LOADER: extracted struct
[4752] LOADER: callfunction returned...
[4752] LOADER: extracted pyimod01_os_path
[4752] LOADER: callfunction returned...
[4752] LOADER: extracted pyimod02_archive
[4752] LOADER: callfunction returned...
[4752] LOADER: extracted pyimod03_importers
[4752] LOADER: callfunction returned...
[4752] LOADER: Installing PYZ archive with Python modules.
[4752] LOADER: PYZ archive: PYZ-00.pyz
[4752] LOADER: Running pyiboot01_bootstrap.py
[4752] LOADER: Running pyi_rth_qt5plugins.py
Traceback (most recent call last):
File "site-packages\PyInstaller\loader\rthooks\pyi_rth_qt5plugins.py", line 47
, in <module>
ModuleNotFoundError: No module named 'PyQt5'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:\users\jake\Projects\Application\venv\lib\site-packages\PyInsta
ller\loader\pyimod03_importers.py", line 712, in load_module
File "<frozen importlib._bootstrap_external>", line 399, in _check_name_wrappe
r
File "<frozen importlib._bootstrap_external>", line 823, in load_module
File "<frozen importlib._bootstrap_external>", line 682, in load_module
File "<frozen importlib._bootstrap>", line 265, in _load_module_shim
File "<frozen importlib._bootstrap>", line 684, in _load
File "<frozen importlib._bootstrap>", line 658, in _load_unlocked
File "<frozen importlib._bootstrap>", line 571, in module_from_spec
File "<frozen importlib._bootstrap_external>", line 922, in create_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: DLL load failed: The specified module could not be found.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "site-packages\PyInstaller\loader\rthooks\pyi_rth_qt5plugins.py", line 49
, in <module>
File "c:\users\jake\Projects\Application\venv\lib\site-packages\PyInsta
ller\loader\pyimod03_importers.py", line 714, in load_module
ImportError: DLL load failed: The specified module could not be found.: PySide2.
QtCore
[4752] Failed to execute script pyi_rth_qt5plugins
[4752] LOADER: OK.
[4752] LOADER: Cleaning up Python interpreter.
[4588] LOADER: Back to parent (RC: -1)
[4588] LOADER: Doing cleanup
[4588] LOADER: Freeing archive status for C:\Users\User\Desktop\Application.exe
我使用以下软件包进行PySide2应用程序构建时遇到了同样的问题(应用程序在某些,但不是所有Win客户端上都运行良好):
- pyinstaller == 3.14
- PySide2 == 5.12.2
Traceback (most recent call last):
File "site-packages\PyInstaller\loader\rthooks\pyi_rth_qt5plugins.py", line 47, in <module>
ImportError: DLL load failed:
通过在Windows 10客户端上安装Visual C ++ 2015 Redistribution Package(x86)解决了问题(在某些客户端上):https://www.microsoft.com/en-us/download/details.aspx?id=53840
但我认为这个问题仍在进行中......
我记得在http://pyinstaller.readthedocs.io/en/stable/spec-files.html#adding-data-files之前使用它
也许它会把你排除在外。
无论如何我不是Windows专家但是使用linux构建二进制创建仅适用于具有与建筑物相同的发行版和架构的盒子/机器上
以上是关于PySide2和pyinstaller gui应用程序将无法在某些Windows计算机上运行的主要内容,如果未能解决你的问题,请参考以下文章
带有 Pyinstaller 的 PySide2:无法执行脚本 pyi_rth_pkgres
pyinstaller打包PySide2写的GUI程序,调用ffmpeg隐藏CMD控制台解决方案
如何从具有 PySide2 GUI 的 python 脚本构建一个 mac os 应用程序?
使用 PyInstaller 打包后 PySide2 应用程序中的路径错误