概要
前提として。
Nimの開発案件が立ち上がったが、統計処理を簡単に扱いたい要件があるのでpythonを気軽につかいたい需要が生まれたのでnimpyでなんとかならないか技術要求が生まれた。だがいろいろ辛かったのでそれについてまとめた。苦心した人の助けになれば。という記事です。
nimpyとは
Native language integration with Python has never been easier!
nimからpythonを呼んだり、pythonからnimを呼べるインターフェイスを提供するライブラリです。
pythonからnimを呼ぶ事例はたくさんみつかったけど、nimからpythonを呼ぶ実例がなかったので試してみた。というか必要になったので試してみた。
どうやら pyImport
で呼べるようだ。
pyImport
nimpyは nimble install nimpy
すると以下のように標準にインストールされたpythonモジュールが利用できる。(macではなぜかnumpyが標準モジュールで入っている)
pyImport("numpy")
だが、sklernなどのライブラリを利用したくてもOS標準のpythonを利用するのでできない。
そんなときは、pythonのPATHを通す他ない。
そのためのメソッドがある。
import nimpy
import nimpy/py_lib as pyLib
pyLib.pyInitLibPath("python path")
discard pyBuiltinsModule()
この構文で呼び出すことで呼び出すpythonを指定できる。だがこれは、lipythonのPathを指定する必要がある。
nimpyのコードを読むと、こちらで読み取るには dylib
で生成されたpythonの指定が必要らしい。
pyenvでインストールした環境では、 libpython**m.dylib
という 形で生成されたlibpythonというものがなかった。
まずは、生成する必要があったので以下を実行。
CONFIGURE_OPTS="--enable-shared" pyenv install {version}
すると libpython**m.dylib
のようなファイルが生成されるのでそのパスを pyLib.pyInitLibPath
で指定すると、要求したPythonのモジュールの挙動や pip でインストールしたモジュールの利用ができた。
Docker環境などで実行すれば滞りなく立ち上げられたかもしれませんが、ローカルでの実行で詰まってしまったのでそのための知見になればです!
まとめ
Nimっていいなと思いました。