【问题标题】:Converting py file to exe, Cannot find existing PyQt5 plugin directories将 py 文件转换为 exe,找不到现有的 PyQt5 插件目录
【发布时间】:2019-02-21 21:13:24
【问题描述】:

我对 phyton 很陌生,我刚刚完成了我的第一个应用程序。 现在,我正在尝试将我的 .py 文件编译为似乎不起作用的 .exe 文件。 我到处寻找解决问题的方法,但似乎找不到。

当我运行这个命令时:pyinstaller gui.py

出现此错误:

4815 INFO: Loading module hooks...
4815 INFO: Loading module hook "hook-encodings.py"...
4913 INFO: Loading module hook "hook-pydoc.py"...
4913 INFO: Loading module hook "hook-PyQt5.py"...
5019 WARNING: Hidden import "PyQt5.sip" not found!
5019 INFO: Loading module hook "hook-PyQt5.QtCore.py"...
5096 WARNING: Unable to find Qt5 translations C:/qt5b/qt_1524647842210/_h_env/Library/translations\qtbase_*.qm. These translations were not packaged.
5096 INFO: Loading module hook "hook-PyQt5.QtGui.py"...
Traceback (most recent call last):
  File "c:\users\ivo\anaconda3\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "c:\users\ivo\anaconda3\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\Ivo\Anaconda3\Scripts\pyinstaller.exe\__main__.py", line 9, in <module>
  File "c:\users\ivo\anaconda3\lib\site-packages\PyInstaller\__main__.py", line 111, in run
    run_build(pyi_config, spec_file, **vars(args))
  File "c:\users\ivo\anaconda3\lib\site-packages\PyInstaller\__main__.py", line 63, in run_build
    PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
  File "c:\users\ivo\anaconda3\lib\site-packages\PyInstaller\building\build_main.py", line 838, in main
    build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
  File "c:\users\ivo\anaconda3\lib\site-packages\PyInstaller\building\build_main.py", line 784, in build
    exec(text, spec_namespace)
  File "<string>", line 17, in <module>
  File "c:\users\ivo\anaconda3\lib\site-packages\PyInstaller\building\build_main.py", line 241, in __init__
    self.__postinit__()
  File "c:\users\ivo\anaconda3\lib\site-packages\PyInstaller\building\datastruct.py", line 158, in __postinit__
    self.assemble()
  File "c:\users\ivo\anaconda3\lib\site-packages\PyInstaller\building\build_main.py", line 500, in assemble
    module_hook.post_graph()
  File "c:\users\ivo\anaconda3\lib\site-packages\PyInstaller\building\imphook.py", line 410, in post_graph
    self._load_hook_module()
  File "c:\users\ivo\anaconda3\lib\site-packages\PyInstaller\building\imphook.py", line 377, in _load_hook_module
    self.hook_module_name, self.hook_filename)
  File "c:\users\ivo\anaconda3\lib\site-packages\PyInstaller\compat.py", line 736, in importlib_load_source
    return mod_loader.load_module()
  File "<frozen importlib._bootstrap_external>", line 399, in _check_name_wrapper
  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 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "c:\users\ivo\anaconda3\lib\site-packages\PyInstaller\hooks\hook-PyQt5.QtGui.py", line 11, in <module>
    hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
  File "c:\users\ivo\anaconda3\lib\site-packages\PyInstaller\utils\hooks\qt.py", line 514, in add_qt5_dependencies
    more_binaries = qt_plugins_binaries(plugin, namespace=namespace)
  File "c:\users\ivo\anaconda3\lib\site-packages\PyInstaller\utils\hooks\qt.py", line 132, in qt_plugins_binaries
    pdir = qt_plugins_dir(namespace=namespace)
  File "c:\users\ivo\anaconda3\lib\site-packages\PyInstaller\utils\hooks\qt.py", line 117, in qt_plugins_dir
    """.format(namespace, ", ".join(paths)))
Exception:
            Cannot find existing PyQt5 plugin directories
            Paths checked: C:/qt5b/qt_1524647842210/_h_env/Library/plugins

我的路径变量:

C:\Users\Ivo\Anaconda3;C:\Users\Ivo\Anaconda3\Library\mingw-w64\bin;C:\Users\Ivo\Anaconda3\Library\usr\bin;C:\Users\Ivo\Anaconda3\Library\bin;C:\Users\Ivo\Anaconda3\Scripts;C:\Users\Ivo\AppData\Local\Programs\Python\Python36-32\Scripts\;C:\Users\Ivo\AppData\Local\Programs\Python\Python36-32\;C:\Users\Ivo\AppData\Local\Microsoft\WindowsApps;C:\Users\Ivo\AppData\Roaming\Composer\vendor\bin;C:\Users\Ivo\AppData\Local\atom\bin;C:\scrcpy-windows-v1.0\adb.exe;D:\xampp2\php;C:\Users\Ivo\AppData\Roaming\npm;

我已经尝试解决这个问题一整天了,如果有人可以帮助我/指出正确的方向,那将是非常受欢迎的。

编辑:

另外,因为我已经重新安装了一些东西来尝试解决问题。该文件无法启动并出现此错误:

Traceback (most recent call last):
  File "C:\Users\Ivo\Documents\temp\project\gui.py", line 9, in <module>
    from PyQt5 import QtCore, QtGui, QtWidgets
ImportError: DLL load failed: The specified procedure could not be found.

【问题讨论】:

    标签: python anaconda pyqt5 pyinstaller


    【解决方案1】:

    康达 4.5.11, Python 3.6.4, PyInstaller 3.4

    在 hooks/qt.py 中插件路径确定不正确。 Qt 要求在任何其他调用之前首先实例化 QCoreApplication。

    我的 qt.py 钩子在 ~\anaconda3\Lib\site-packages\PyInstaller\utils\hooks\qt.py。

    我是这样编辑的:

        json_str = exec_statement("""
            import sys
    
            # exec_statement only captures stdout. If there are
            # errors, capture them to stdout so they can be displayed to the
            # user. Do this early, in case PyQt5 imports produce stderr
            # output.
            sys.stderr = sys.stdout
    
            import json
            from %s.QtCore import QLibraryInfo, QCoreApplication
    
            # QLibraryInfo isn't always valid until a QCoreApplication is
            # instantiated.
            app = QCoreApplication([])
            paths = [x for x in dir(QLibraryInfo) if x.endswith('Path')]
            location = {x: QLibraryInfo.location(getattr(QLibraryInfo, x))
                        for x in paths}
            try:
                version = QLibraryInfo.version().segments()
            except AttributeError:
                version = None
            print(str(json.dumps({
                'isDebugBuild': QLibraryInfo.isDebugBuild(),
                'version': version,
                'location': location,
            })))
        """ % self.namespace)
    

    见1。

    【讨论】:

    • 我们如何在不从 conda 环境中编辑钩子的情况下做到这一点?通过更新 qt 什么的?我觉得弄乱 .py 文件本身很不舒服
    • 我远非专家,但我找不到其他方法来让它发挥作用。
    【解决方案2】:

    在Exception: Cannot find PyQt5 plugin directories when using Pyinstaller despite PyQt5 not even being used 中尝试修复。简而言之:

    pip intall PyQt5

    请注意,奇怪的是,conda install PyQt5 可能无法解决问题。

    我遇到了同样的问题并看到了另一个建议:制作丢失的目录(在你的情况下为 C:/qt5b/qt_1524647842210/_h_env/Library/plugins)并复制两个文件 pyqt5.dll 和 pyqt5qmlplugin.dll (大概在某处c:\Users[name]\AppData\Local\conda\conda\envs) 到目录。

    我没有尝试过,因为我用pip install PyQt5 解决了这个问题。您可能想尝试一下。

    【讨论】:

    • 那个奇怪的子目录名称是从哪里来的? (在你的情况下,它是 C:/qt5b/qt_1524647842210/_h_env/Library/plugins )?这个问题不是直接给你的,而是给任何阅读本文的人。我有一个完全不同的目录,但“创建奇怪的目录”解决方案也对我有用(不仅仅是安装)
    • 由于异常抱怨:异常:找不到现有的 PyQt5 插件目录检查路径:C:/qt5b/qt_1524647842210/_h_env/Library/plugins
    • @cong you - 我的评论应该更清楚。它不适合你。我在问是否有其他人知道为什么您的消息中的目录与我的不同,即使它基本上是相同的消息。 pyinstaller 如何创建该目录名称,因为您的与我的不同,并且它们都不存在于我的系统上。\
    【解决方案3】:

    我使用 Python 3.6.3 和 ANACONDA3 和 Spyder 作为 IDE。 Pyinstaller 3.4。

    尝试用Pyinstaller生成exe文件,遇到两种错误:

    1. "AttributeError: 'str' 对象没有属性 'items'"。这被解决了 更新在 Python 脚本中导入的每个模块,其中: pip install --upgrade module_name>
    2. “找不到现有的 PyQt5 插件目录”:这是下一个错误。作为 cong yu 在他之前的帖子中提到过,我通过运行解决了这个问题 pip install PyQt5

    3. 不要忘记将 setuptools 升级到最新版本

    该进程提供了一个我尚未测试的 exe 文件。 但至少,我让 Pyinstaller 到达了终点,没有出错。

    希望这会有所帮助

    顺便说一句,新年快乐:)

    编辑:

    我测试了py2exe生成的独立.exe 程序正在运行,并且没有错误地结束。

    但问题是 xlsx 不再运行,因为没有 Excel 文件被创建。这些文件基于 pandas 数据帧。 我的提示是 pandas 模块,它是程序的主要核心, 似乎被改变了。我注意到使用的数据帧被截断, 通过在 Spyder 的 Ipython 控制台中编辑的控制线。

    我认为我最好的选择是重新安装 Anaconda3。

    所以要小心,升级你想要的程序中使用的模块 独立于 py2exe。似乎升级 pandas 模块是一个 错误。

    很抱歉,如果我在主帖中给出了不好的建议,但升级是 运行 py2exe 的最佳方式。 pandas的升级要小心。

    【讨论】:

      【解决方案4】:

      尝试卸载 Anaconda。过去有问题。如果没有,您也可以尝试相当不错的py2exe。

      【讨论】:

        【解决方案5】:

        我安装了最新版本的 PyInstaller,那么"Cannot find existing PyQt5 plugin directories" 的这个异常被解决了。

        您可以通过following command安装最新版本的PyInstaller:

        pip install https://github.com/pyinstaller/pyinstaller/tarball/develop
        

        P.S:关于我的设置的一些信息:

        $conda info
              conda version : 4.6.14
        conda-build version : 3.17.8
             python version : 3.7.3.final.0
                   platform : win-64
                 user-agent : conda/4.6.14 requests/2.21.0 CPython/3.7.3 Windows/10 Windows/10.0.17763
        
        $ pip show pyinstaller
        Name: PyInstaller
        Version: 3.5.dev0+d74052489
        Summary: PyInstaller bundles a Python application and all its dependencies into a single package.
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-03
          • 2020-11-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多