我正在使用Imatest IT(v5.0.1),并且需要对我的Python代码使用Imatest IT测试,但是,我的Python代码也与MATLAB的(2017b)Python API接口,似乎存在冲突。

您可以在下面看到,仅在导入matlab.engine之后尝试导入ImatestLibrary会导致异常。
仅导入一个或另一个不会引起任何问题。

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.


有没有办法解决这个问题?

最佳答案

根据the documentation of the Imatest Python interface有关导入imatest.it的信息:


  在后台,ImatestLibrary构造函数将启动Matlab MCR运行时,并将所有IT库加载到内存中。


这表明imatest本身会干扰MATLAB引擎的状态。虽然导入顺序通常无关紧要,但是某些导入应该先于其他导入进行适当的初始化,而稍后导入的模块依赖于较早导入的模块(例如,先导入matplotlib并设置后端,然后再导入pyplot将使用上述后端)。

因此,我唯一的建议是尝试切换导入顺序以查看是否有帮助。如果不是这样,那么您很不走运(就Stack Overflow而言):MATLAB和Imatest都是昂贵的专有(甚至是封闭源代码)产品,因此您应该向其中一个或两个提交错误报告,因为没人其他人将能够判断是否以及如何解决冲突。

关于python - MATLAB引擎和Imatest IT的导入冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51929303/

10-16 22:54