はじめに
今回はJuliaをインストールしてJupyteLabで使う方法についてまとめました。
前から昨今話題になっているJuliaが気になっていました。
Pythonの様に記述しやすくて
Cの様に早い
という触れ込みです。
新しい言語覚えるのはそれなりに大変だし
既習の言語と混乱しそうなので躊躇していましたが
Twitterで紹介されていた書籍をポッチとして購入しました。
これをきっかけにして
PCに環境を整え使い始めるまでの大体のことができたので
まとめておこうと思います。
- はじめに
- インストール
- JupyterLabで使用できるようにする
- 簡単なテスト
- Pythonのモジュールを使う
- Pythonのmatplotlibを使う
- PyCallの使用でエラーが出た場合
- おわりに
- 参考文献
インストール
各種OSへのインストールの概要
コンパイル済みのバイナリバージョンが各種OSにあります。
それらを用いた、Juliaの各種環境へのインストールについては
以下のページにまとめられています。
Windowsはインストーラがあります。
MacOSはおなじみのdmgファイルをクリックして
出てきたダイアログでおなじみの作法である
アプリケーションフォルダにアプリをドラッグアンドドロップします。
このままだとターミナル等では実行できませんので
以下の様にして
各種コマンド置かれていてパスが通っているディレクトリに
シンボリックリンクを作ります。
ln -s /Applications/Julia-1.0.app/Contents/Resources/julia/bin/julia /usr/local/bin/julia
この際、自分のインストールしたJuliaのバージョン(上の例では1.0)の確認が必要です。
Ubuntu 20.04では
sudo apt install julia
でインストール完了です。
Juliaの実行
ターミナルやコマンドプロンプトで
julia
Juliaのインタラクティブシェルが開きます。
Juliaのインタラクティブシェルは
REPLというらしく、少し試しためしてみました。
インタラクティブシェルがあるのはPythonと同じですね。
JupyterLabで使用できるようにする
PythonはJupyterLabで使っているので
Juliaもできると聞き早速使える様にしてみます。
REPLで ] を押すとパッケージインストールモードに移行する様です。
ここで
add IJulia
とすると
なにやらインストールが始まり、
JupyterLabで使える様になります。
JupyterLabのランチャー画面にもJuliaが追加されているのが分かります。
簡単なテスト
使用方法はPythonで使用する時と同じで「+」ボタンをおして新規作成します。
基本的な
- 四則演算
- 変数
- 複素数の演算
- while ループ
- if文
等を試してみました。
また、Juliaでは下図の様に標準で行列の計算もできる様です。
Pythonのモジュールを使う
PyCallのインストール
以下はMacでのみ試しています。Linux系は同じだと思われます。
シェルで
env PYTHON=$(which python) julia -q
とするとREPLが起動します。
REPL上で
ENV["PYTHON"]
としたあと
] を押して、パッケージインストールモードに入ります。
そして、以下のコマンドを実行します。
add PyCall
PyCallの使い方
numpyを例にしてみます。 つぎのようにして使います。
using PyCall np=pyimport("numpy") x=np.arrange(0, 1, 1000) y=x.^2
上記は0から1までを1000分割した値をxにいれその2乗をyに入れます。
Pythonのmatplotlibを使う
Juliaで使い慣れたmatplotlibを使ってグラフを描くこともできます。
ただし前述のPyCallでmatplotlibを呼び出すと、Jupyterでは別窓が開いてしまいました。
さらにそのグラフの窓が閉じられなくなるので、うまく使えませんでした。
そこで
Juliaでmatplotlibを使うには
PyPlotを使います。
インストールはJuliaのREPLで ] を押して
add PyPlot
で終了です。
PyPlotの使い方
前述のPyCallでnumpyを使った例を示しましたが
それと合わせてみます。
using PyCall using PyPlot np=pyimport("numpy") x=np.arrange(0, 1, 1000) y=x.^2 plot(x, y) show()
PyCallの使用でエラーが出た場合
MacOSでpyenvでpython環境を整えていた場合にかなりの確率で PyCallが使えません。
これはpyenvでインストールしたpythonが静的ライブラリしかリンクできず
動的ライブラリを使うPyCallに対応していないためです。
この場合はまずpythonをアンインストールするしかないのですが
今使っている環境に戻すために、今使っているモジュールのリストを
吐き出してファイルall_module.txtに留めておきます。
pip freeze > all_module.txt
その後、アンインストールします
pyenv uninstall 3.7.2
3.7.2の部分はご自分のバージョンです。
これでいったん削除されたので
再インストールです。
今度はダイナミックライブラリをリンクできる様に
次の様にコマンドを入力します。
CONFIGURE_OPTS="--enable-shared" pyenv install 3.7.2
続いてパッケージ管理のpipを最新版にします。
pip install -U pip
そのあと,元のモジュールを再びインストールします。
pip install -r all_module.txt
この後はPyCallを前述した通りインストールします。
しかし、これでもまだうまくいきません。
私の環境では
以下のパスにdeps.jl
というファイルがあります。
~/.julia/packages/PyCall/zqDXB/deps/
このファイルの中のPYTHONHOME=
の行を
PYTHONHOME=""
に変更して保存します。
以上で対策が終了します。
これにはかなりはまりました。
私はこのあと、tqdmが使えなくなりましたので
念のため、以前のJupyterLabのインストールを参考にして
JupyterLabのインストールも再度やっておいた方が良いです。
おわりに
今日からJuliaはじめました。
Pythonより早いというところに期待して
Pythonで重い処理があれば移植してみたいと思います。
この記事も最初の取り掛かりのまとめ記事として
短時間に仕上げるつもりでしたが
PyCallでつまづいてしまい、思ったよりも
すごく、時間がかかりました。
初めてのことは、そう簡単じゃないですね。
参考文献
Juliaのことがよくまとめられていて買ってよかったです。
以下はpyenvで環境を整えていた場合、PyCallで必ずうまくいかないので参考になります。
MacでPyCallにはまった場合の記事です。
さらに、こちらを参考にしてようやく問題が解決しました。