У меня была похожая проблема. В частности, я хотел использовать PyQt из интерпретатора Python, встроенного в приложение, использующее несовместимую версию Qt. В основном приложении использовались две библиотеки Qt DLL: QtCore.dll и QtGui.dll.
Когда я загружал PyQt из встроенного интерпретатора Python, я получал ошибку:
ImportError: DLL load failed: The specified procedure could not be found.
Это произошло на линии:
from PyQt4 import QtGui
Проблема заключается в том, что при загрузке несовместимого файла QtGui.dll в пространство процесса основного приложения любые ссылки на файл QtGui.dll (например, из файла QtGui.pyd) являются неправильными.
То, что случилось потом, я не горжусь.
Сначала я переименовал QtGui4.dll
в дистрибутиве PyQt на QtGuiX.dll
и затем переименовали QtCore4.dll
в QtCoreX.dll
. Обратите внимание, что
переименование поддерживается с тем же количеством символов, это важно.
Далее я открыл файл QtGui.pyd
в Notepad ++ и заменил все
текстовые ссылки от QtGui4.dll
до QtGuiX.dll
и от
QtCore4.dll
до QtCoreX.dll
. Я повторил процесс для файлов:
QtCore.pyd
, QtGuiX.dll
и QtCoreX.dll
.
Наконец я проверил, что мое тестовое приложение PyQt все еще работает. Это сделал!
Затем я попытался запустить тестовое приложение PyQt из встроенного
Интерпретатор Python, и это тоже сработало.
Так что, похоже, работает в паре тривиальных случаев. Я ожидаю, что я
необходимо повторить процесс для всех библиотек DLL и PYD в PyQt
распределение.
Вероятно, это неправильный способ сделать что-то, но я не могу придумать какие-либо конкретные причины, по которым он может взорваться (за исключением того, что я изменю длину имени файла).
Благодарю (или обвиняйте) других в цепочке за то, что вдохновили эту ужасную историю.