ホーム>source

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.

この問題を克服する方法はありますか?

あなたの答え
  • 解決した方法 # 1

    imatest.it のインポートに関するImatest Pythonインターフェースのドキュメントによると :

    Behind the scenes, the ImatestLibrary constructor will start up the Matlab MCR Runtime and load all the IT libraries into memory.

    これは、 imatest  それ自体は、MATLABエンジンの状態に干渉します。通常、インポートの順序は重要ではありませんが、後でインポートされるモジュールが以前にインポートされたモジュールに依存している場合(たとえば、 matplotlib のインポート  最初に pyplot をインポートする前にバックエンドを設定します  それは使用する バックエンド)。

    したがって、私の唯一の提案は、インポートの順序を切り替えて、それが役立つかどうかを確認することです。うまくいかない場合は(スタックオーバーフローに関する限り)、MATLABとImatestはどちらも高価なプロプライエタリ(およびクローズドソース)製品であるため、バグレポートを提出する必要があります。それ以外の場合は、競合を修正できるかどうか、どのように修正できるかを伝えることができます。

  • 解決した方法 # 2

    どのバージョンのpythonを使用していますか? Matlabsがサポートしている2017bのバージョンではない可能性がありますが、限定されています。私は正確にどれを忘れましたが、2.7、3.3、3.4、そしておそらく3.5だと思います

  • 解決した方法 # 3

    これに対する回避策は、Pythonのマルチプロセッシングモジュールを使用して新しいプロセスを作成することでした。プロセスは、MATLABライブラリまたはImatestライブラリのいずれかを使用します。余分なコード層ですが、動作します。

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ migration - パッケージマネージャーコンソールでVS 2017でupdate-databaseを実行するとエラーが発生する