pythonnet - Python.NETとは
Pythonから.NET向けのDLLを呼び出すことができるライブラリです.
MITライセンスとなっており,だれでも無償で使うことができます.
https://github.com/pythonnet/pythonnet
使い方
使い方はこちらの記事が大変参考になりました.
Pythonから.NETを呼び出す方法とついでにその逆も
ここでは簡単に紹介します.
インストール方法
pip install pythonnet
使用例
test.pyと同じディレクトリにあるABCLIb.dllを使いたい場合.
別のディレクトリにある場合は適宜パスを追加してください.clr.AddReference('./DEF/ABCLib')
など.
import clr
clr.AddReference('ABCLib')
from ABCTools import ABCLib
abc = ABCLib()
clr
はCommon Language Runtimeの略のようです.
注意点とエラーが起きたとき対処方法
私がpythonnetを使用したときにつまづいたポイントとその対象方法を紹介します.
.dllを書かない
エラー:System.IO.FileNotFoundException: Unable to find assembly 'ABCLib.dll'.
clr.AddReference
するときに拡張子'.dll'を書いているとこのエラーが発生します。
'.dll'を消してみましょう。
# エラーが発生する例
clr.AddReference('ABCLib.dll')
# エラーが発生しない例
clr.AddReference('ABCLib')
セキュリティを許可する
エラー:System.IO.FileNotFoundException: Unable to find assembly 'ABCLib'.
外部から取得してきたdllの場合、ファイルへのアクセスがブロックされていることがあります。
アクセスを許可する設定をしてみてください。
dllファイルで右クリック→プロパティ→全般→最下段の「許可する」にチェック→OK
DLLとPythonで64bit/32bitを合わせる
エラー:System.IO.FileNotFoundException: ファイルまたはアセンブリ 'ABCLib, Version=~~~~~~~~, Culture=neutral, PublicKeyToken=null'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。
DLLとPythonのbitが合っていないと読み取ることができませんでした。
- Pythonのbitの調べ方
import sys
print(sys.version)
3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916 64 bit (AMD64)]
- DLLのbitの調べ方
こちらの記事を参考にさせていただきました。EXE、DLLが32bitなのか64ビットなのか確認する方法 - Qiita