Итак, у меня есть два .py файла, один сгенерированный QtDesigner , а другой, который в основном реализует функциональность GUI.Используя pyinstaller , я сгенерировал файл .exe для использования в системах без python и связанных библиотек.
Команда: pyinstaller my_script.py
работает без ошибок.
Проблема возникает при запуске файла .exe .
Ошибка:
Qt: Обнаружена непроверенная версия Windows 10.0!Traceback (последний вызов был последним): файл "site-packages \ PyInstaller \ loader \ rthooks \ pyi_rth_qt4plugins.py", строка 41, в ImportError: нет модуля с именем 'PySide'
Во время обработки вышеуказанного исключения,произошло другое исключение:
Traceback (последний вызов был последним): файл "site-packages \ PyInstaller \ loader \ rthooks \ pyi_rth_qt4plugins.py", строка 43, в файле "", строка 2237, в файле _find_and_load "", строка 2226, в _find_and_load_unlocked файле" ", строка 1191, в _load_unlocked файле" ", строка 1161, в _load_backward_compatible файле" C: \ python \ lib \ site-packages \ PyInstaller \ loader \ pyimod03_importers.py ", строка 714,в модуле load_module = loader.load_module (полное имя)
RuntimeError: оба модуля PyQt4.QtCore и PyQt5.QtCore обертывают класс QObject [11364] Не удалось выполнить скрипт pyi_rth_qt4plugins
Я пытался найти решение этой проблемы.Вот решения, которые я попробовал:
Как заставить PyQt5 использовать для класса QObject? - просто выполните импорт PyQt
, так как первый оператор не решает проблему.
https://github.com/tzutalin/labelImg/issues/268 - здесь рекомендуется удалить PyQt4 и только для использования PyQt5 .У меня они есть в моей системе, некоторые проекты используют PyQt5 , а некоторые - PyQt4 , поэтому я не хочу удалять последние.Кроме того, должно быть другое решение , заставляющее меня этого не делать.
https://intellij -support.jetbrains.com / hc / en-us / community / posts/ 115000551170-PyQt4-and-PyQt5-collisions-in-PyCharm-2017-2-1-when-debugging-QGIS-application - Это была похожая ошибка, поэтому я добавил:
matplotlib.rcParams['backend'] = 'Qt4Agg'
matplotlib.rcParams['backend.qt4'] = 'PyQt4'
для моего импорта все еще не работает.
Примечание: Я использую:
PyCharm 2018.1 (Community Edition)
Build #PC-181.4203.547, построено 26 марта 2018 года
JRE: 1.8.0_152-release-1136-b20 amd64
JVM: 64-битная виртуальная машина OpenJDK от JetBrains sro
Windows 10 10.0
и код отлично работает в IDE.
РЕДАКТИРОВАТЬ :
Мой импорт:
from PyQt4 import QtCore, QtGui
from matplotlib.backends.backend_qt4agg import FigureCanvasQTagg as Canvas
Я не добавляю другие операторы импорта, связанные с Qt.
EDIT - 2 :
Попытка cx_Freeze вместо PyInstaller , вот установочный файл.
import sys
from cx_Freeze import setup, Executable
base = None
if sys.platform == "win32":
base = "Win32GUI"
additional_mods = ['numpy.core._methods', 'numpy.lib.format',
'numpy._distributor_init']
setup( name="ASCII2fig",
version = "0.1",
description = "GUI",
options = {'build_exe': {'includes': additional_mods}},
executables = [Executable("ASCII2figALL_main_edited.py", base=base)])
Я добавил additional_mods
после выполнения сценария один раз после ImportError
, которые являются безостановочными.Любые способы взломать и найти, какие библиотеки я должен упомянуть явно?
Кроме того, я также попытался проверить, какие библиотеки на самом деле импортируются, когда я запускаю свой основной скрипт с Qt, используя:
from modulefinder import ModuleFinder
filename = "ASCII2figALL_main_edited.py"
finder = ModuleFinder()
finder.run_script(filename)
for name, mod in finder.modules.items():
print(name)
и, по-видимому, он импортирует PyQt5 внутри .Как упоминалось ранее, у меня есть NO операторов импорта, в которых упоминается PyQt5.
Edit - 3
Итак, я изменил код на pure PyQt5 , обновил pyinstaller до последней версии - 3.4, и теперь существует новая проблема, где он не находит плагины Qt.Это все еще как-то импортирует PyQt4, и я не знаю, где.