PyQt5 и QML в Pyinstaller [дубликат]

Это связано с тем, что staticmethod является дескриптором и требует выборки атрибута на уровне класса для реализации протокола дескриптора и получения истинного вызываемого.

Из исходного кода:

Его можно назвать либо в классе (например, C.f()), либо в экземпляре (например, C().f()); экземпляр игнорируется, за исключением его класса.

Но не непосредственно изнутри класса, пока он определяется.

Но, как заметил один комментатор, это вовсе не «дизайн на Pythonic». Вместо этого используйте функцию уровня модуля.

4
задан Nicolas Rougier 27 November 2015 в 22:50
поделиться

3 ответа

Работа с PyInstaller Я заметил, что просто не удается связать зависимости QML, а затем заморозить приложение. Вы можете проверить, также ли это ваш случай, скопировав папки QtQuick и QtQuick.2 из пакетов сайта python (<your_python_path>\Lib\site-packages\PyQt5\Qt\qml) и поместив их рядом с замораживаемым исполняемым файлом:

QtQuick
QtQuick.2
your_executable.exe

Если приложение работает после вы можете отредактировать файл .spec, чтобы автоматически связывать эти папки (pyinstaller generate .spec -файл при первом запуске).

# -*- mode: python -*-
import os
import site

block_cipher = None

site_packages_dir = site.getsitepackages()[1]
qml_dir = os.path.join(site_packages_dir, 'PyQt5', 'Qt', 'qml')

added_files = [
    (os.path.join(qml_dir, 'QtQuick'), 'QtQuick'),
    (os.path.join(qml_dir, 'QtQuick.2'), 'QtQuick.2'),
]

a = Analysis(['pyqt5_qml.py'],
             binaries=None,
             datas=added_files,
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)

exe = EXE(pyz,
          a.scripts,
          exclude_binaries=True,
          name='app',
          debug=False,
          strip=False,
          upx=False,
          console=True,
)

coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=False,
               name='pyqt5_qml')

Затем попробуйте запустить pyinstaller против этого spec-файла: pyinstaller pyqt5_qml.spec

0
ответ дан 9dogs 20 August 2018 в 16:39
поделиться

Для меня это в Windows, которая в итоге оказалась переменной среды QML2_IMPORT_PATH, не была установлена. Как только я установил это в «C: \ Python35 \ Lib \ site-packages \ PyQt5 \ qml", он сработал!

0
ответ дан egfconnor 20 August 2018 в 16:39
поделиться

Я надеюсь, что это могло бы помочь

Я боролся с той же проблемой

Через несколько часов я сделал что-то простое, но для меня это сработало

In my main.py Я имею в виду файл, в который вы загружаете файл QML, который я добавил

import PyQt5.QtQuick

И затем запустите pyinstaller:

pyinstaller  -F  - -onefile main.py

И он работал

0
ответ дан eyllanesc 20 August 2018 в 16:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: