不案内、ひじょーに。
ワタシの紹介も含め、情報は一方的に「.NET for Python としての pythonnet」使いに偏っている。
「Python を .NET に埋め込みたい」向きにも IronPython が競合他社となるわけだが、これもやっぱし「公式 CPython を使わなければならない理由」に基いてどっちがいいか決めればいいだろう、て前置きは予めしとく。つまりどう考えてもアレっすよ、「NumPy/SciPy を苦もなく使いたい」かどうかさ、たとえば。
でその「Embedding Python in .NET」だが、いや、これじゃわからんてば:
プロジェクトにどんな設定が必要か、具体的には参照アッセンブリとして何を追加すればいいのか、がなんにも書いてない。せめてアッセンブリの DLL の名前くらい書けよ…。
一時間以上徘徊してようやくわかった。まずはこれ:
これが「答えの一部その壱」。「アッセンブリの名前と場所」。
「Python から pythonnet で Excel へのアクセス」の話で GAC の説明を一応したが、pythonnet は「.NET for Python」として使われる場合に、アッセンブリの検索時「Python モジュールの検索パス」も含める。つまり Python 2.7 ならばたとえば「c:/Python27/Lib/site-packages
」(を含む環境変数 PYTHONPATH (等)が指定する場所)。なので:
1 Python 2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)] on win32
2 Type "help", "copyright", "credits" or "license" for more information.
3 >>> import clr
4 >>> clr.AddReference("Python.Runtime")
5 <System.Reflection.RuntimeAssembly object at 0x0000000002AFC518>
6 >>> clr.Python.Runtime.PythonEngine
7 <class 'Python.Runtime.PythonEngine'>
と「Python からは」使えるが、「Python for .NET」として使いたい場合は、この「c:/Python27/Lib/site-packages
にいる」という情報を明示的に与える必要がある、てわけだわね。
さぁあとは公式サイト説明を真似るだけだ、であれば良かったんだけど、そこさえも肝心なことが書かれてない。
この不正解が正解に限りなく近いと信じている。ノリは CPython の CPython C API を使うのとだいたい同じ感じなのかな、という印象。無論ダルかろうが、まぁそんなもんだ。
まだ試みてないが、このあと試みてみる。これに近いノリのをやってみたい。
続く…。