2017-03-14 6 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 

내가 얻을 : I에 포함 된 test.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가 필요한지 이해가 안되니?

+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을 자동으로 가져올 수있는 방법을 찾지 못했습니다.

아마도 경로에 C:\Python34\Lib\site-packages\PyQt5을 남겨 두는 것 같아요. 파이썬 34에서 다른 잘못된 파일을 가져 왔을 것입니다. 수동으로 파일을 복사하거나 경로 등을 사용하여 올바른 일을하려고 할 때, PyInstaller가 수정 될 때까지 Python34를 사용하려고합니다.