Противоречивость импорта движка MATLAB и Imatest IT

1

Я использую 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-import

3 ответа

0
Лучший ответ

Обходной путь к этому я использовал для создания новых процессов с использованием модуля многопроцессорности Python. Процессы будут использовать библиотеки MATLAB или библиотеки Imatest. Дополнительный слой кода, но он работает.

1

Согласно документации интерфейса Imatest Python относительно импорта imatest.it:

За кулисами конструктор ImatestLibrary запустит время выполнения Matlab MCR Runtime и загрузит все информационные библиотеки в память.

Это говорит о том, что imatest сам влезает с состоянием двигателя MATLAB. Хотя порядок импорта обычно не имеет значения, изредка некоторые из них должны происходить перед другими для правильной инициализации, когда модули, импортированные позже, полагаются на ранее импортированные модули (например, сначала импортируют matplotlib и устанавливают бэкэнд перед импортом pyplot который будет использовать упомянутый бэкэнд).

Поэтому мое единственное предложение - попытаться переключить порядок импорта, чтобы увидеть, помогает ли это. Если это не так, вам не повезло (что касается): оба MATLAB и Imatest являются дорогостоящими запатентованными (и даже закрытыми исходными) продуктами, поэтому вы должны сообщать отчеты об ошибках ни к одному, ни к обоим, потому что никто else сможет определить, может ли и как конфликт может быть исправлен.

  • 1
    Я попытался переключить импорт, но, если matlab.engine возникает после этого, он не может найти этот модуль. Я связался с Imatest LLC, и они сначала посоветовали мне попробовать обновить и использовать соответствующую версию MATLAB с той же версией, которую они использовали с этой версией Imatest. Я не мог заставить его работать, и они наконец подтвердили, что их скомпилированная библиотека Python не может использоваться в том же процессе, что и движок MATLAB.
  • 0
    @PJD спасибо за отзыв. Если кажется, что окончательный ответ таков (т.е. два модуля несовместимы), вы должны добавить его в качестве ответа и принять его.
0

Какую версию python вы используете? Возможно, это не одна из поддерживаемых Matlabs версий для 2017b, которые ограничены. Я точно забуду, но я думаю, 2.7, 3.3, 3.4 и, возможно, 3.5

  • 0
    Я пробовал Python v3.4 и v3.5, но это не меняет ситуацию.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню