この記事の読者
- 新しい技術に触れてみたい方
- Mojoに興味のある方
きっかけ
先日、Qiitaのトレンドを見ていると以下のような記事を発見しましたので、試さずにはいられないと思い、試してみました1
実際に試してみた🔥
インストール
Mojoのホームページに則ってインストールを行いました。
なお、Mojoのインストールにはどうやらユーザー認証が必要だそうで…。
下記リンクを貼っているページからダウンロードを行ってみてください:)
Visual Studio Code の拡張機能をインストール
下記のリンクよりダウンロードいただくか、「Mojo」で検索してみてください!
実行🔥!
拡張子は.mojo
もしくは.🔥
だそうです。拡張子に絵文字があるのはなんだか新鮮ですね。ちなみに、実行する内容はmain()
内に記述する必要があります。
fn main():
print("Hello World!")
Hello World!
ちなみに、Pythonのコードも実行できるそうです!
ということで、試してみたら本当に実行できました!
def main():
from python import Python
let np = Python.import_module("numpy")
array = np.array([1, 2, 3])
print(array)
[1 2 3]
ということで、これで実際何ができるかなと思って試しで半径から体積を計算できるプログラム作ってみました!
def main():
from python import Python
let py = Python.import_module("builtins")
let np = Python.import_module('numpy')
user_inp = py.input("Enter the rudius of ball: ")
let radius = py.float(user_inp)
let volume = radius * radius * 4 * np.pi / 3
print("Volume is ", volume)
(てかほとんどPythonで書いてもーてるから意味なくね…?)
ビルド
ビルドは、mojo build ファイル名
です。とっても簡単ですね!
mojo build test03.mojo
すると、実行ファイルが出来上がりますので、実行してみましょう!
./test03
すると、こんなエラーが、、、
Mojo/Python interoperability error: Unable to locate a suitable libpython, please set `MOJO_PYTHON_LIBRARY`
zsh: segmentation fault ./test03
エラーが出てるので直そうと思って調べてみると、どうやらMojoがPythonのバージョンをバイナリに埋め込んでないことが原因だそうです:(
ということで、GitHubのIssue通りにこのバグを直していきたいと思います。
バグ修正
1.Pythonライブラリのパスの取得
python3 -c 'import sysconfig; print(sysconfig.get_config_var("LIBDIR"))'
/opt/homebrew/opt/python@3.11/Frameworks/Python.framework/Versions/3.11/lib
2.共有ライブラリファイルの取得
ls $(python3 -c 'import sysconfig; print(sysconfig.get_config_var("LIBDIR"))') | grep libpython
libpython3.11.dylib
ここで、GitHubのIssueには'''.so'''ファイルを検索するように書いてありますが、実際検索して出てきたファイルの拡張子は.dylib
です。が、この違いはどうやら問題がないようです。
3.環境変数を設定
ちなみに、
export MOJO_PYTHON_LIBRARY="/opt/homebrew/opt/python@3.11/Frameworks/Python.framework/Versions/3.11/lib/libpython3.11.dylib"
さあ、もう一回ファイルを実行してみると、
./test03
Enter the rudius of ball: 2
Volume is 16.755160819145562
今度はうまくいきましたね!!やった!
感想
- まだまだ完成までの道のりは遠いけど、確かにDjangoしか触ったことのないレベルの僕でも違いがわかるぐらいなので、完成した時の使い道がかなり広そう!
- 絵文字の拡張子はやっぱあたらs(ry
- Pythonを勉強せなあかんなあって思いました。(もっとはよ気づけ)
最後に
InstagramやThreadsで何気ない日常やについて投稿してますので、ぜひフォローの方よろしくお願いします:)