带有 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

Qt for python pyside2/6 使用 PyInstaller打包项目exe

pyinstaller打包PySide2写的GUI程序,调用ffmpeg隐藏CMD控制台解决方案