理系的な戯れ

理工学系とくにロボットやドローンに関する計算・プログラミング等の話題を扱って、そのようなことに興味がある人たちのお役に立てればと思っております。

JuliaをJupyterLabで始める

アイキャッチ画像

はじめに

今回はJuliaをインストールしてJupyteLabで使う方法についてまとめました。

前から昨今話題になっているJuliaが気になっていました。

Pythonの様に記述しやすくて

Cの様に早い

という触れ込みです。

新しい言語覚えるのはそれなりに大変だし

既習の言語と混乱しそうなので躊躇していましたが

Twitterで紹介されていた書籍をポッチとして購入しました。

1から始める Juliaプログラミング

1から始める Juliaプログラミング

これをきっかけにして

PCに環境を整え使い始めるまでの大体のことができたので

まとめておこうと思います。

インストール

各種OSへのインストールの概要

コンパイル済みのバイナリバージョンが各種OSにあります。

それらを用いた、Juliaの各種環境へのインストールについては

以下のページにまとめられています。

julialang.org

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というらしく、少し試しためしてみました。

REPLの窓
REPLの窓

インタラクティブシェルがあるのはPythonと同じですね。

JupyterLabで使用できるようにする

PythonはJupyterLabで使っているので

Juliaもできると聞き早速使える様にしてみます。

REPLで ] を押すとパッケージインストールモードに移行する様です。

ここで

add IJulia

とすると

なにやらインストールが始まり、

JupyterLabで使える様になります。

"JupyterLabで使用可能にする"
JupyterLab

JupyterLabのランチャー画面にもJuliaが追加されているのが分かります。

JupyterLabランチャー画面
JupyterLabランチャー画面

簡単なテスト

使用方法はPythonで使用する時と同じで「+」ボタンをおして新規作成します。

JupyterLabの新規作成
JupyterLabの新規作成

基本的な

  • 四則演算
  • 変数
  • 複素数の演算
  • 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()

matplotlibを使ってグラフを描画
matplotlibを使ってグラフを描画

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のインストールも再度やっておいた方が良いです。

blog.rikei-tawamure.com

おわりに

今日からJuliaはじめました。

Pythonより早いというところに期待して

Pythonで重い処理があれば移植してみたいと思います。

この記事も最初の取り掛かりのまとめ記事として

短時間に仕上げるつもりでしたが

PyCallでつまづいてしまい、思ったよりも

すごく、時間がかかりました。

初めてのことは、そう簡単じゃないですね。

参考文献

Juliaのことがよくまとめられていて買ってよかったです。

1から始める Juliaプログラミング

1から始める Juliaプログラミング

以下はpyenvで環境を整えていた場合、PyCallで必ずうまくいかないので参考になります。

MacでPyCallにはまった場合の記事です。

qiita.com

さらに、こちらを参考にしてようやく問題が解決しました。

qiita.com