Я использую Imatest IT (v5.0.1), и мне нужно использовать тесты Imatest IT с моим кодом Python, однако мой код Python также взаимодействует с API-интерфейсом MATLABs (2017b) и, похоже, конфликтует.
Ниже вы можете увидеть, что просто пытайтесь импортировать ImatestLibrary после импорта результата matlab.engine в исключение. Просто импорт одного или другого не вызывает проблем.
import matlab.engine
from imatest.it import ImatestLibrary
Exception caught during initialization of Python interface. Details: DLL load failed: The specified procedure could not
be found.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python34\lib\site-packages\imatest\it.py", line 6, in <module>
import imatest.library
File "C:\Python34\lib\site-packages\imatest\library\__init__.py", line 279, in <module>
_pir.import_cppext()
File "C:\Python34\lib\site-packages\imatest\library\__init__.py", line 272, in import_cppext
self.cppext_handle = importlib.import_module("matlabruntimeforpython" + self.interpreter_version)
File "C:\Python34\lib\importlib\__init__.py", line 109, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ImportError: DLL load failed: The specified procedure could not be found.
Есть ли способ преодолеть эту проблему?
Обходной путь к этому я использовал для создания новых процессов с использованием модуля многопроцессорности Python. Процессы будут использовать библиотеки MATLAB или библиотеки Imatest. Дополнительный слой кода, но он работает.
Согласно документации интерфейса Imatest Python относительно импорта imatest.it
:
За кулисами конструктор ImatestLibrary запустит время выполнения Matlab MCR Runtime и загрузит все информационные библиотеки в память.
Это говорит о том, что imatest
сам влезает с состоянием двигателя MATLAB. Хотя порядок импорта обычно не имеет значения, изредка некоторые из них должны происходить перед другими для правильной инициализации, когда модули, импортированные позже, полагаются на ранее импортированные модули (например, сначала импортируют matplotlib
и устанавливают бэкэнд перед импортом pyplot
который будет использовать упомянутый бэкэнд).
Поэтому мое единственное предложение - попытаться переключить порядок импорта, чтобы увидеть, помогает ли это. Если это не так, вам не повезло (что касается): оба MATLAB и Imatest являются дорогостоящими запатентованными (и даже закрытыми исходными) продуктами, поэтому вы должны сообщать отчеты об ошибках ни к одному, ни к обоим, потому что никто else сможет определить, может ли и как конфликт может быть исправлен.
Какую версию python вы используете? Возможно, это не одна из поддерживаемых Matlabs версий для 2017b, которые ограничены. Я точно забуду, но я думаю, 2.7, 3.3, 3.4 и, возможно, 3.5