2017-03-14 12 views
0

Windows 10、Python 3.5、PyQt5はPip経由でインストールされ、pyinstaller 3.2.1はPip経由でインストールされています。私はPythonの下で正常に動作するときにうまく動作するPyQt5 qmlアプリを作ることができます。PyInstaller/QtQuick:qmakeバージョン5.xが見つかりません

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

をし、実行します:

pyinstaller main.py 

は、私が手に:私は含まれていtest.pyと呼ばれるPythonモジュールを使用している場合

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に関する2行目)をコメントアウトすると、PyInstallerは成功します。

マシンにqmakeがないため、qmakeへのパスポイントを作成できません。なぜ私はqmakeが必要なのか分かりません。

+0

FWIW pip3とpyinstaller 3.2.1からインストールされたOSX Sierra/Python 3.5/PyQt5で同じエラーが発生しました – lemondifficult

答えて

0

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.dlldist\main\qml\QtQuick\Controlsにコピーすることで解決できます。その後、私のアプリケーションは期待通りに動作します。

pyinstallerが正しいqtquickcontrolsplugin.dllを自動的に取得する方法が見つかりませんでした。

私はパスにおそらくPython34からいくつかの間違ったファイルを拾っていると思います。そのような場合は手動でコピーしたり、パスなどでうまくやって正しいことをしようとすると、 PyInstallerが修正されるまでPython34を使用するつもりです。

関連する問題