ОБЗОРмодули PyQt не могут быть импортированы после QtWidgets.QApplication (sys.argv)
У меня возникли проблемы импорта модулей после строки QtWidgets.QApplication(sys.argv)
, скажем, я получил этот небольшой отрывок main.py
:
import sys
import importlib
from PyQt5 import QtWidgets
print('Sys Path:')
print(' %s\n' % '\n '.join(sys.path))
if sys.argv[-1] == '1':
print('Importing Before...\n')
from PyQt5 import Qt
app = QtWidgets.QApplication(sys.argv)
elif sys.argv[-1] == '2':
print('Importing After...\n')
app = QtWidgets.QApplication(sys.argv)
from PyQt5 import Qt
print('Done')
- Если я запустил
python main.py 1
, все работает должным образом. - Если я запустил
python main.py 2
, процесс зависает (возможно, в бесконечном цикле) без каких-либо ошибок.
Выход из python main.py 2
:
(py352) D:\sources\personal\python\pyqt\mcve>python main.py 2
Sys Path:
D:\sources\personal\python\pyqt\mcve
D:\sources\personal\python
d:\virtual_envs\py352\Scripts\python35.zip
d:\virtual_envs\py352\DLLs
d:\virtual_envs\py352\lib
d:\virtual_envs\py352\Scripts
c:\Python352\Lib
c:\Python352\DLLs
d:\virtual_envs\py352
d:\virtual_envs\py352\lib\site-packages
Importing After...
(HANG)
ПОПЫТКИ
Испытано с парой virtualenvs на win7:
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64)] on win32
наwin7
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:01:18) [MSC v.1900 32 bit (Intel)] on win32
PyQt был установлен на virtualenvs с использованием пипа и версия эти из них:
>>> QtCore.QT_VERSION
329472
>>> QtCore.QT_VERSION_STR
'5.7.0'
>>> QtCore.PYQT_VERSION_STR
'5.7'
Применимая ИНФОРМАЦИЯ
Некоторые очень хорошие люди из #pyqt freenode
канала помогли мне проверить репо и ни один из них не смог воспроизвести проблему, версии и платформы python, которые они использовали:
- win10 - 3.5.2 | Анаконда 4.1.1 (64-битный)
- Win8 - 3.5.2 (v3.5.2: 4def2a2901a5, 25 июня 2016, 22:01:18)
- убунту 16,04 - 3.5 0,2 (по умолчанию, 17 ноября 2016, 17:05:23)
ВОПРОСЫ
- Что причина
from PyQt5 import Qt
(или других PyQT модулей) застрять на моей коробке и других не людей способность воспроизводить? - Как я могу исправить это поведение? Это важно для меня, потому что я хотел бы динамически загружать плагины после запуска моих приложений pyqt.
Одно конкретное предложение: создать тестовый скрипт, который просто пытается выполнить 'importlib.import_module (mod_name)' до и после создания 'QApplication'.Если он все еще висит, у вас есть мекс; если он не зависает, вы наверняка знаете, что вы недостаточно отлаживали тестовое задание. Должна быть возможность реорганизовать 'list_plugins' в автономную функцию. Затем вы можете просто указать его в любом каталоге, содержащем файлы '* .py', и посмотреть, все ли он зависает. Идея состоит в том, чтобы изолировать только один небольшой раздел кода, который вызывает проблему и устраняет * все * еще. – ekhumoro
Можете ли вы попробовать два предложения, которые я сделал в своих предыдущих комментариях? Это должно быть всего около десяти минут работы, и это позволит вам разместить надлежащую mcve. Другие вещи, вероятно, не имеют значения - это почти наверняка проблема, характерная для вашей конкретной установки. – ekhumoro
@ekhumoro Хорошо, я обновил репо еще раз. Если у вас есть время, сообщите мне, если вы увидите что-то еще, что может быть улучшено дальше, чтобы еще больше уменьшить сложность. – BPL