带有 Pyinstaller 的 PySide2:无法执行脚本 pyi_rth_pkgres
Posted
技术标签:
【中文标题】带有 Pyinstaller 的 PySide2:无法执行脚本 pyi_rth_pkgres【英文标题】:PySide2 with Pyinstaller: Failed to execute script pyi_rth_pkgres 【发布时间】:2019-03-15 22:14:53 【问题描述】:所以过去几个月我一直在使用 Pyinstaller 将我的应用程序打包和分发为单个 exe 文件,但是我最近从在我的 GUI 应用程序中使用 Tkinter 切换到使用 PySide2 (QT5 Wrapper)。问题是,我无法打包这些可执行文件,因为我在运行时收到以下错误:
Exception: [Errno 2] No such file or directory: 'C:\\support\\signature\\loader.py'
Traceback (most recent call last):
File "pyscript", line 23, in bootstrap
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\support\\signature\\loader.py'
AttributeError: module 'signature_loader' has no attribute 'pyside_type_init'
SystemError: could not initialize part 2
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "PyInstaller\loader\rthooks\pyi_rth_pkgres.py", line 11, in <module>
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "C:\Users\felip\AppData\Roaming\Python\Python37\site-packages\PyInstaller\loader\pyimod03_importers.py", line 627, in exec_module
exec(bytecode, module.__dict__)
File "pkg_resources\__init__.py", line 33, in <module>
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "C:\Users\felip\AppData\Roaming\Python\Python37\site-packages\PyInstaller\loader\pyimod03_importers.py", line 627, in exec_module
exec(bytecode, module.__dict__)
File "platform.py", line 116, in <module>
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "C:\Users\felip\AppData\Roaming\Python\Python37\site-packages\PyInstaller\loader\pyimod03_importers.py", line 627, in exec_module
exec(bytecode, module.__dict__)
File "subprocess.py", line 50, in <module>
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "C:\Users\felip\AppData\Roaming\Python\Python37\site-packages\PyInstaller\loader\pyimod03_importers.py", line 627, in exec_module
exec(bytecode, module.__dict__)
File "signal.py", line 45, in <module>
File "c:\program files\python37\lib\functools.py", line 54, in update_wrapper
value = getattr(wrapped, attr)
SystemError: <method-wrapper '__get__' of getset_descriptor object at 0x0000023A7ACE88B8> returned a result with an error set
[9240] Failed to execute script pyi_rth_pkgres
该包应由一个 .py 文件、一个 .uic QT 文件和一个 SQLite3 .db 组成。
我已经尝试过使用 Pyinstaller 以多种方式打包,但是在尝试执行应用程序时会出现同样的异常。
我正在使用 Python 3.7.2、Pyinstaller 3.4、PySide 5.12.1 和 peewee 3.9.2。
非常感谢任何帮助。
【问题讨论】:
在冻结应用程序之前是否使用过 sqlite3 db 文件?您使用的是spec
文件吗?你能发帖吗?我不是专家,但我已经冻结了几个带有 sqlite3 db 文件的小应用程序,在具有几乎相同模块版本的 Windows 上没有问题。
嘿丹尼尔,感谢您的评论。我最终将 Pyside2 降级到 5.12.0,现在它可以正确打包。显然 Pyside2 5.12.1 有一个未解决的问题。
【参考方案1】:
以下内容对我有用:
1. 卸载 pyinstaller 并从 git 安装开发者版本(但到目前为止没有改变任何东西 - 也许没有必要)
2. 输入pyinstaller -v example.pyw
3. 使用 2 的返回值作为隐藏导入。在我的情况下pyinstaller --hidden-import=4.0.dev0+869062597f example.pyw
【讨论】:
以上是关于带有 Pyinstaller 的 PySide2:无法执行脚本 pyi_rth_pkgres的主要内容,如果未能解决你的问题,请参考以下文章
PySide2 QMainWindow()捆绑在PyInstaller中后无法呈现[重复]
使用 PyInstaller 打包后 PySide2 应用程序中的路径错误
使用 pyinstaller 或 fbs 冻结应用程序会更改 pyside2 应用程序的默认配色方案
Qt for python pyside2/6 使用 PyInstaller打包项目exe