【问题标题】:PyInstaller / QtQuick: Could not find qmake version 5.xPyInstaller / QtQuick:找不到 qmake 版本 5.x
【发布时间】:2017-03-14 15:02:42
【问题描述】:

Windows 10、Python 3.5、PyQt5 通过 Pip 安装,pyinstaller 3.2.1 也通过 Pip 安装。我可以制作一个在 Python 下正常运行的 PyQt5 qml 小应用程序。

如果我有一个名为 test.py 的 Python 模块,其中包含:

from PyQt5.QtWidgets import QApplication
from PyQt5.QtQuick import QQuickView

然后做:

pyinstaller main.py

我明白了:

3452 ERROR: Could not find qmake version 5.x, make sure PATH is set correctly or try setting QT5DIR.
3452 ERROR: Cannot find QT_INSTALL_QML directory, "qmake -query QT_INSTALL_QML" returned nothing

接着是:

Traceback (most recent call last):
  File "C:\Python35\Scripts\pyinstaller-script.py", line 11, in <module>
    load_entry_point('PyInstaller==3.2.1', 'console_scripts', 'pyinstaller')()
  File "c:\python35\lib\site-packages\PyInstaller\__main__.py", line 90, in run
    run_build(pyi_config, spec_file, **vars(args))
  File "c:\python35\lib\site-packages\PyInstaller\__main__.py", line 46, in run_build
    PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
  File "c:\python35\lib\site-packages\PyInstaller\building\build_main.py", line 788, in main
    build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
  File "c:\python35\lib\site-packages\PyInstaller\building\build_main.py", line 734, in build
    exec(text, spec_namespace)
  File "<string>", line 16, in <module>
  File "c:\python35\lib\site-packages\PyInstaller\building\build_main.py", line 212, in __init__
    self.__postinit__()
  File "c:\python35\lib\site-packages\PyInstaller\building\datastruct.py", line 161, in __postinit__
    self.assemble()
  File "c:\python35\lib\site-packages\PyInstaller\building\build_main.py", line 470, in assemble
    module_hook.post_graph()
  File "c:\python35\lib\site-packages\PyInstaller\building\imphook.py", line 409, in post_graph
    self._load_hook_module()
  File "c:\python35\lib\site-packages\PyInstaller\building\imphook.py", line 390, in _load_hook_module
    attr_value = sanitizer_func(attr_value)
  File "c:\python35\lib\site-packages\PyInstaller\building\utils.py", line 466, in format_binaries_and_datas
    src_root_path_or_glob))
FileNotFoundError: Path or glob "Qt" not found or matches no files.

如果我注释掉 test.py 中的第二行(关于 QtQuick 的那一行)PyInstaller 成功。

我无法指定 qmake 的路径,因为我的机器上没有 qmake。我真的不明白为什么我需要 qmake?

【问题讨论】:

  • FWIW 我在从 pip3 和 pyinstaller 3.2.1 安装的 OSX Sierra / Python 3.5 / PyQt5 上遇到同样的错误

标签: python pyqt pyqt5 pyinstaller qt-quick


【解决方案1】:

使用 Python 3.4.4 和 PyQt5 5.5.1(来自 https://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-5.5.1/ - 我认为这是 3.4 的最后一个 PyQt5)和 PyInstaller 3.2.1,这一切都可以开箱即用。

我认为不同之处在于Lib\site-packages\PyQt5 下的 PyQt5 目录结构在 3.4 和 3.5 之间有很大不同,我猜 PyInstaller 还没有处理这个问题。特别是,Python34 在Lib\site-packages\PyQt5 的根目录中有Qt5 二进制文件(Qt5Core.dll 等),而在Python35 中,它们最终隐藏在Lib\site-packages\PyQt5\Qt\bin 下。还有很多其他的区别。

无论如何,简单的答案是使用 Python34 / PyQt5.5.1。 FWIW 我有点让它与 Python35 和最新的 PyQt5 (5.8.1) 一起使用,但它是一个障碍。我安装了 Python34 和 Python35,并在我的 Windows 路径中安装了以下(按此顺序):

C:\Python35\
C:\Python35\Scripts\
C:\Python35\Lib\site-packages\PyQt5\Qt\bin
C:\Python34\Lib\site-packages\PyQt5

Python34 行必须在那里,否则我们会得到 Could not find qmake version 5.x 的东西,而上面的 Python35\Lib\site-packages\PyQt5\Qt\bin 路径似乎使它能够选择正确的二进制文件。

这样做,pyinstaller 报告成功,但是当我运行时,我得到一个关于 Cannot load library ... dist\main\qml\QtQuick\Controls\qtquickcontrolsplugin.dll: The specified procedure could not be found 的失败。这可以通过手动将Python35\Lib\site-packages\PyQt5\Qt\qml\QtQuick\Controls\qtquickcontrolsplugin.dll 复制到dist\main\qml\QtQuick\Controls 来解决。之后我的应用按预期运行。

我还没有找到让 pyinstaller 自动选择正确的 qtquickcontrolsplugin.dll 的方法。

我猜想将C:\Python34\Lib\site-packages\PyQt5 留在路径中,它可能会从 Python34 获取其他一些错误文件,如果是这种情况,您可以手动复制它们或尝试修改路径等以尝试使正确的事情发生,但我只会使用 Python34,直到 PyInstaller 得到修复。

【讨论】:

    【解决方案2】:

    我和你有同样的问题。 但是,今天它与这个补丁一起工作:https://github.com/pyinstaller/pyinstaller/pull/3233#issuecomment-362094587

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-09
      • 1970-01-01
      • 2017-04-11
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多