はじめに
Githubのcodespacesを使用して、MojoでNumpyを動かすことを目標とします。
buildなしで実行するとすんなり動くが、buildするとエラーが出てなかなか解決できなかったので、ここに記します。
エラー内容
最初にGithubのcodespacesを立ち上げます。
次に、公式ドキュメントを参考に以下でmojoをインストールしてパスを通します。{MODULAR_AUTH}に自分の値を入れます。 (https://developer.modular.com/download より会員登録をして発行)
curl https://get.modular.com | \
MODULAR_AUTH={MODULAR_AUTH} \
sh -
modular install mojo
echo 'export MODULAR_HOME="$HOME/.modular"' >> ~/.bashrc
echo 'export PATH="$MODULAR_HOME/pkg/packages.modular.com_mojo/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
main.mojo
from python import Python
def main():
let np = Python.import_module("numpy")
let a = np.array([1, 2, 3])
print(a)
以下を実行すると、
mojo main.mojo
> [1 2 3]
問題なく動きます。しかし、
mojo build main.mojo
./main
> Mojo/Python interoperability error: Unable to locate a suitable libpython, please set `MOJO_PYTHON_LIBRARY`
Segmentation fault (core dumped)
となり、MOJO_PYTHON_LIBRARを設定しなければなりません。様々なサイトを参考にlibpython3.xx.soのパスを渡せばいいことはわかるも、どこにあるかなかなかわからず。見つけて設定しても別のエラーが、、、
解決方法
設定するPyhtonのバージョンが間違っていました。以下で解決できます。
echo 'export MOJO_PYTHON_LIBRARY="/opt/conda/lib/libpython3.10.so"' >> ~/.bashrc
source ~/.bashrc
mojo build main.mojo
./main
> [1 2 3]
となり、解決できました。
まとめ
以下でNumpyをビルドできる環境構築ができます。
curl https://get.modular.com | \
MODULAR_AUTH={MODULAR_AUTH} \
sh -
modular install mojo
echo 'export MODULAR_HOME="$HOME/.modular"' >> ~/.bashrc
echo 'export PATH="$MODULAR_HOME/pkg/packages.modular.com_mojo/bin:$PATH"' >> ~/.bashrc
echo 'export MOJO_PYTHON_LIBRARY="/opt/conda/lib/libpython3.10.so"' >> ~/.bashrc
source ~/.bashrc