11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Nimpyでnimからpythonを呼ぶ

Last updated at Posted at 2020-03-20

概要

前提として。
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っていいなと思いました。

11
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?