WindowsへのJulia言語のインストール

黒木玄

2017-06-20~2018-09-06

  • Copyright 2018 Gen Kuroki
  • Lisence: MIT

このファイルは以下の場所で最新版を読める:

目次

Juliaのインストールの仕方の概説

上の節ほど新しい. できるだけ最新の概説に従った方がよい.

Anaconda3とJulia v1.0の組み合わせ (2018-09-05に追加)

私が使っているWindows機は64ビット機なのでそれに合わせてバイナリをダウンロードした.

(1) Anaconda Downloads から Windows 用のAnaconda Python 3.6 version (以下 Anaconda3 と呼ぶ)のインストーラーをダウンロードし, Anaconda3 を

C:\Anaconda3

以下にインストールする. Jupyter を使用できるかどうか確認する. ショートカットの内容をいじると Jupyter で使えるディレクトリの位置を変えることができる.

(2) Windows の環境変数を

JUPYTER=C:\Anaconda3\Scripts\jupyter.exe

に設定しておく. これによって, Julia言語の方で使用する Jupyter のバイナリが Anaconda3 のバイナリになる.

(3) Julia Downloads から Julia v1.0.0 の Windows Self-Extracting Archive をダウンロードし,

C:\Julia-1.0.0

以下にインストールする.

(4) Julia v1.0 のバイナリを起動する.

(5) julia> プロンプトで ] と入力すると, パッケージを扱うモードに入ることができ, プロンプトは (v1.0) pkg> に変わる. Control-C でもとの julia> プロンプトに戻れる. 以下の作業を実行する.

julia> ENV["PYTHON"] = raw"C:\Anaconda3\python.exe"
julia> ]
(v1.0) pkg> add IJulia
(v1.0) pkg> build IJulia
(v1.0) pkg> add PyCall
(v1.0) pkg> build PyCall
(v1.0) pkg> add PyPlot
(v1.0) pkg> build PyPlot
(v1.0) pkg> precompile
(v1.0) pkg> ^C
julia> 

以上の build の実行は必要ないかもしれない. すべてに成功したら,

julia> using PyPlot
julia> xs = -5:0.01:5
julia> plot(xs, sin.(xs))

と実行してプロットに成功したら, PyCall と PyPlot のインストールに成功している.

(6) Jupyter を起動する. ブラウザにJupyterの窓が開くはずである.

(7) 右上の New のメニューの中に Julia 1.0.0 が追加されているはずであり, それを選択すると Julia 1.0.0 のタブが開き, しばらく待つと, Julia 1.0.0 のカーネルが起動され, 使用可能になる. そこで

using PyPlot
xs = -5:0.01:5
plot(xs, sin.(xs))

を実行すれば, その下にサインカーブがプロットされるはずである. これで IJulia のインストールにも成功していることが確認できた.

より進んだ使い方についてはこの文書の下の方を参照せよ.

In [1]:
using PyPlot
xs = -5:0.01:5
figure(figsize=(5,3))
plot(xs, sin.(xs))
grid(true)

JuliaProのすすめ (2018-01-24に追加)

下の方でも説明しておきましたが、自分のパソコンで Julia 言語を Jupyter notebook で使えるようにするためには、JuliaPro をインストールする方法が簡単です。この方法なら巨大インストーラーのダウンロードに成功してしまえば、インストーラーのダブルクリック一発でいとも簡単に Julia 言語を楽しめるようになります。

これは個人的な意見ですが、初心者の人は JuliaPro をインストールして使う場合には、Juno ではなく、主に Jupyter から Julia を使用するのがよいと思います。 Pkg.add("PackageName")Pkg.status() も Jupyter notebook 上で行うと記録が自動的に残って便利です。

Julia言語で数値計算のプログラムを書きたい人はおそらく「高速に計算したい」というモチベーションを持っていると思います。そのような人は次のリンク先も見ておいた方がよいでしょう。

必要最小限のインストール (2018-01-16に追加)

JuliaPro を入れた人には以下の作業は必要ない. まず

Juliaに触って見ようと思った時に便利なリンク集(2017年末版)

に目を通しておく.

(1) AnacondaのPython 3.*版をインストールする. 私は次の場所にインストールした:

C:\Anaconda3

これでPythonとJupyterが使えるようになったはず. そのことを確認する.

(2) 環境変数 JUPYTER を設定する.

JUPYTER=C:\Anaconda3\Scripts\jupyter.exe

これを忘れるとあとで Pkg.add("PyPlot") をJulia言語で実行したときに二重にPython環境がインストールされてしまうことになる(時間とディスクスペースが無駄になる).

(3) Julia をインストールする. 私は次の場所にインストールした:

C:\Julia-0.6.2

(4) julia.exe を起動して, 以下を実行する.

Pkg.add("IJulia")

これでJupyterでJulia言語が使えるようになったはず. そのことを確認する.

(5) julia.exe を起動して, または, JupyterからJuliaのノートブックを立ち上げて以下を実行する.

ENV["PYTHON"]="C:\\Anaconda3\\python.exe"
Pkg.add("PyPlot")

これでJuliaから使うPythonがAnaconda3のpython.exeになり, PyPlot でグラフをプロットできるようになったはず. グラフのプロットはJupyter上で行う.

using PyPlot
plot(rand(10), rand(10))

でそのことを確認できる.

これだけでもかなり快適にJulia言語を使えるのですが, さらに細かく注意深くインストールしたい場合には以下を参照して下さい.

経緯

Windows 7 と 8.1 の Windows 機で Julia + Jupyter Notebook を使用できるようにした。

以下は主に Windows 8.1 機へのインストールの記録。

2017-06-15 Anaconda3 と Julia v0.5.2 を入れた。

2017-06-20 Julia v0.6.0 を入れ、v0.5.2のパッケージもすべて入れ直した。

2017-10-28 Julia v0.6.1 を入れた。

2017-12-19 Julia v0.6.2 を入れた。

2018-01-19 JuliaPro v0.6.2.1 MKL も入れて併用するにした。

JuliaBox と JuliaPro

JuliaBox

Julia を Jupyter Notebook で使用するための最も簡単な手段は

https://juliabox.com

を使用することである。

いきなり Anaconda や Julia をインストールしようとするより前に、こちらを試してみて感触をつかんでおいた方がよいと思う。私も JuliaBox の方を先に使い始めていた。

旧バージョンの https://v1.juliabox.com/ ではパッケージなども含めて500MBしか使用できなかったので、大きなパッケージは実質的に使用不可能だった。しかし、新しい JuliaBox https://next.juliabox.com では使用できるディスク容量が増えており、実用上十分なパッケージをインストールできるようになった。

現在の JuliaBox で満足できない場合には、手もとのパソコンで Julia 言語を使用するための環境を整備した方がよいだろう。

JuliaPro

2018年1月24日追記

以下で解説するように、Jupyter notebook を使うために自前でPython環境を準備てそれに合わせてJuliaをインストールしなくても、JuliaPro をインストールするだけで Julia を Jupyter notebook で利用できます。

https://juliacomputing.com/products/juliapro.html

から DOWNLOAD Free の方をクリックして、登録手続きを済ませれば、JuliaPro personal 無料版をダウンロードできるようになります。巨大なパッケージなのでダウンロードに苦労するかもしれません。しかし、これのインストーラーさえダウンロードできてしまえば、インストーラーをダブルクリックしてインストールするだけで、JuliaをJupyter notebookで使えるようになります。ハードディスクの消費量は2GB強でした。

Windowsユーザーであれば

JuliaPro-0.6.2.1 (for Windows) -    (680.55M)

をダウンロードすればよいだろう。

MKL版

JuliaPro では MKL = Intel Math Kernel Library をリンクしたバイナリも配布されている。予想外のトラブルに自分で対処できるならばこちらをダウンロードして試してみてもよいかもしれない。 (初心者にはおすめしない。)

Windows ユーザーならば

JuliaPro-0.6.2.1 - MKL (for Windows) -  (811.97M)

がそのMKL版である。

Juliaの通常版は MKL ではなく、数学ライブラリとして Open BLAS をリンクしている。Open BLAS も十分も速い。行列の対角化についてはMKL版の方が3割程度計算時間が短くなるようだが、あらゆる項目で MKL の方が Open BLAS よりも十分に勝っているようには見えない。私が行ったベンチマークテストの結果は以下の場所で公開されている。

http://nbviewer.jupyter.org/gist/genkuroki/7f6437f97405607347a635cf6f631a48

しかし、行列の固有値・固有ベクトルの計算(eig 函数の計算)については Open BLAS 版で計算した場合よりも、MKL版で計算した場合の方が計算時間が3割ほど少なくて済んだ。行列の対角化のハードな計算をしたい人は MKL 版を使う価値があると思う。

https://gist.github.com/genkuroki/46c278bfaaa0d7e652123177972b568d

Base.LOAD_CACHE_PATH 問題

この節の内容は JuliaPro 以外の Julia を自分のパソコンにインストールしていない人には関係しない.

私は JuliaPro v0.6.2.1 MKL 版を

C:\JuliaProMKL-0.6.2.1

以下にインストールし、JuliaProではない通常版の Julia と併用している。

下の方で説明する方法で Julia をインストールしてしまった人は環境変数 JULIA_PKGDIR を設定することになる。その設定が有効なままで複数の Julia 言語がインストールされた状態で JuliaPro を利用すると、ENV["Base.LOAD_CACHE_PATH"] の先頭に環境変数 JULIA_PKGDIR の内容が設定されてしまう。私の場合には

In [1]: Base.LOAD_CACHE_PATH

Out [1]: 2-element Array{String,1}:
"C:\\JuliaPkg\\lib\\v0.6"
"C:\\JuliaProMKL-0.6.2.1\\pkgs-0.6.2.1\\lib\\v0.6"

のようになってしまった。これは極めて不都合である。なぜならば、パッケージのプレコンパイルファイルが JuliaPro ではない Julia の方で使うディレクトリに作られるようになってしまうからだ。そのようになってしまう原因は

C:\JuliaProMKL-0.6.2.1\Julia-0.6.2\etc\julia\juliarc.jl

の内容にあった。そこでは環境変数 JULIA_PKGDIR の内容を push! するようになっている。私はそのファイル中の push!unshift! に書き換えた。

--- juliarc-org.jl      2018-01-19 23:47:39.503285600 +0900
+++ juliarc.jl  2018-01-20 15:13:43.455046700 +0900
@@ -8,2 +8,2 @@
-push!(Base.LOAD_PATH, normpath(joinpath(ENV["HOMEDRIVE"]*ENV["HOMEPATH"], ".julia", "v0.6")))
-push!(Base.LOAD_CACHE_PATH, normpath(joinpath(ENV["JULIA_PKGDIR"], "lib", "v0.6")))
+unshift!(Base.LOAD_PATH, normpath(joinpath(ENV["HOMEDRIVE"]*ENV["HOMEPATH"], ".julia", "v0.6")))
+unshift!(Base.LOAD_CACHE_PATH, normpath(joinpath(ENV["JULIA_PKGDIR"], "lib", "v0.6")))

このようにしたおかげで現在では

In [1]: Base.LOAD_CACHE_PATH

Out [1]: 2-element Array{String,1}:
"C:\\JuliaProMKL-0.6.2.1\\pkgs-0.6.2.1\\lib\\v0.6"
"C:\\JuliaPkg\\lib\\v0.6"

となっている。私の場合にはこのようにしないと快適に JuliaPro を使用できなかった。

JuliaPro での SymPy の利用の仕方

JuliaPro では Pkg.add("SymPy") とするだけでは SymPy パッケージを利用できるようにはならない。なぜならば、JuliaPro に付属する Python パッケージに SymPy が含まれていないからだ。コマンドラインから

c:\JuliaProMKL-0.6.2.1\Python\Scripts\pip install sympy

にあたることを適切に実行して、JuliaPro の Python 環境に sympy をインストールすれば、SymPy を使えるようになります。 その代わりにJulia言語内から

PYSCRIPTS = replace(ENV["PYTHON"], "\\python.exe", "\\Scripts\\")
ENV["Path"] = PYSCRIPTS * ";" * ENV["Path"]
run(`pip install sympy`)

を実行して同じことをできます。(Windows 以外を使っている人は適宜修正して下さい。) まとめると、

PYSCRIPTS = replace(ENV["PYTHON"], "\\python.exe", "\\Scripts\\")
ENV["Path"] = PYSCRIPTS * ";" * ENV["Path"]
run(`pip install sympy`)
Pkg.add("SymPy")
using SymPy

で SymPy を利用できるようになりました。

JuliaPro の Jupyter への nbextensions の追加

Juliaで以下を実行することによって、 Jupyter で nbextensions も使えるようになりました。

PYSCRIPTS = replace(ENV["PYTHON"], "\\python.exe", "\\Scripts\\")
ENV["Path"] = PYSCRIPTS * ";" * ENV["Path"]

run(`pip install jupyter_nbextensions_configurator`)
run(`jupyter nbextensions_configurator enable --user`)

run(`pip install https://github.com/ipython-contrib/jupyter_contrib_nbextensions/tarball/master`)
run(`jupyter contrib nbextension install --user`)

Jupyter notebookを終了させて、立ち上げ直して下さい。

nbextensions の Gist-it は特に便利です。それを使うとほとんどワンボタンで Jupyter notebook を GitHub Gist に投稿して公開することができます。Jupyter notebook には数式を使った解説を含めることができるので、数学的に有益な情報を広めたい場合には特に役に立ちます。ずっと下の方にその使い方の解説があります。

Anaconda3をインストール

以下は 2017-06-15 の作業。(この節の内容は JuliaPro のみを使いたい人には関係しない。)

https://www.continuum.io/downloads から Python 3.6 version のAnacondaをダウンロードしてインストールした。

インストール先は

C:\Anaconda3

Python 2.7 version のAnacondaが必要になった場合には別に考える。

Windows のスタートアップメニューに

Anaconda3 (64bit)/Jupyter Notebook

のショートカットが作成されたので、それをデスクトップにコピーした。

そして、コピーしたショートカットのプロパティーのリンク先の一番最後にある

%USERPROFILE%

を Jupyter Notebook における初期フォルダにしたい場所に書き換えた。具体的には

C:\home\genkuroki\Dropbox\Jupyter

に書き換えた。そのように書き換えたショートカットをダブルクリックすると、 ブラウザに Jupyter Notebook が開く。初期フォルダは設定した通りになっている。

その後に Julia 0.5.2 もインストールしたのだが、ここでは説明を省略する。

そのときの稚拙な試行錯誤の様子は

https://genkuroki.github.io/documents/Jupyter/20170615InstallJuliaAnaconda.html

で確認できる。

Julia v0.6.0 をインストール

以下は 2017-06-20 に行った作業。

Windows の環境変数を次のように設定する。

JUPYTER=C:\Anaconda3\Scripts\jupyter.exe
JULIA_PKGDIR=C:\JuliaPkg

C:\JuliaPkg というフォルダも念のために作っておいた。

https://julialang.org/downloads/ から Julia 0.6.0 の Windows 64bit 版をダウンロードして

C:\Julia-0.6.0

にインストールした。

デスクトップに Julia-0.5.2 と Julia-0.6.0 のショートカットを作成した。

以下では Julia-0.6.0 を使う。

Julia を起動して、以下を実行する。

Pkg.init()
Pkg.add("IJulia")

そのとき、大事なポイントは

INFO: Found Jupyter version 4.3.0: C:\Anaconda3\Scripts\jupyter.exe

のように表示されていることである。環境変数 JUPYTER を設定しておいたおかげでこうなった。

もしも環境変数によって jupyter.exe のありかを Julia に教えていなかったら、 Julia は自前で miniconda (Anaconda2 相当)を入れて、Jupyter Notebook の設定を行おうとする。

せっかく Anaconda3 を入れてあったのだから、 そちらにすでにインストールされている Jupyter 環境を利用した方が効率的である。

Julia v0.6.1 をインストール

2017-10-28 に Julia v0.6.1 をインストールした。

初めて Julia 言語をインストールする人は以上の v0.6.0 の場合と同じ作業をするだけでよい。

v0.6.0 をすでにインストールすみの筆者は以下の作業を行った。

  1. https://julialang.org/downloads/ から 64-bit の Windows Self-Extracting Archive をダウンロード

  2. それを実行して、C:\Julia-0.6.1 にインストール

  3. C:\Users\username\AppData\Roaming\jupyter\kernels のようなディレクトリに Jupyter notebook のカーネルの設定が保管されている。それを v0.6.0 から v0.6.1 対応に変更した。julia-0.6/kernel.json などの内容をほんの少しだけ書き直すだけの作業であった。

Julia v0.6.2 をインストール

2017-12-19 に Julia v0.6.2 をインストールした。作業は上と同じ。

Jupyter Notebook の確認

以上によって Julia 0.6.0 を Jupyter Notebook から使えるようになった。

デスクトップに作ってあった Jupyter Notebook のショートカットをダブルクリックすると、ブラウザに Jupyter Notebook の窓が開く。 New をクリックして確認すると、カーネルとして Julia 0.6.0 も選択できるようになっている。数日前に Julia 0.5.2 もインストールしてあったので、Julia 0.5.2 と Julia 0.6.0 の両方が選択可能になった。

CodeMirror の julia.js の最新版のインストール

2017-12-08 に Jupyter notebook で使用している CodeMirror の julia.js を最新版に更新した. 更新する前には Jupyter notebook が Julia 0.6 に対応しておらず、不便を強いられた.

CodeMirror のソースコードは

https://github.com/codemirror/CodeMirror

で配布されており、Julia 0.6 への対応については

https://github.com/codemirror/CodeMirror/pull/4842

を参照して欲しい. julia.js の更新の手順は以下の通り.

  1. https://github.com/codemirror/CodeMirror/blob/master/mode/julia/julia.js の Raw ボタンを右クリックして julia.js の最新版をダウンロードする.

  2. C:\Anaconda3\Lib\site-packages\notebook\static\components\codemirror\mode\julia に最新版の julia.js を上書きコピーする.

不安ならば古い版のファイル名を変えて残しておいた方がよいかもしれない.

パッケージ

試しに入れてみたパッケージについては

https://gist.github.com/genkuroki/b1d7e27846c64c98e669fd5cf80f6ac1

を参照して欲しい。

幾つか注意するべきポイントについて説明しよう。

PyCallパッケージの入れ方

PyCall は Julia から Python を使用するためのパッケージである。

それによって Python の世界にある豊富な資産を Julia から利用できるようになる。

たとえば PyPlot パッケージによって、 Python 側にある便利なプロット用ライブラリ matplotlib を Julia 側から利用することができるようになる。 Julia によるプロットの例が次のリンク先にたくさんある。

https://gist.github.com/gizmaa/7214002

他にも SymPy パッケージによって、 Python 側にある数式処理ライブラリ sympy を利用できるようになる。

PyCall パッケージを入れるときには、 使用する Python のバイナリを環境変数の設定で Julia に教えてあげなければいけない。 私は PyPlot パッケージを入れることによって、 PyCall パッケージも入れた。

ENV["PYTHON"]="C:\\Anaconda3\\python.exe"
Pkg.add("PyPlot")

これでインストールされた PyCall パッケージがどの Python を使用するようになっているかについては

using PyCall
display(PyCall.pyprogramname)
display(PyCall.pyversion)
display(PyCall.conda)
display(PyCall.libpython)

で確認できる。私の場合には

"C:\\Anaconda3\\python.exe"
v"3.6.1"
false
"C:\\Anaconda3\\python36"

と表示された。

別の Python を使用したい場合には

ENV["PYTHON"]="別のpython.exe"
Pkg.build("PyCall")

を実行する。

PlotsパッケージでGIF動画

PlotsパッケージでGIF動画を作りたい人は、前もって

https://www.imagemagick.org/script/binary-releases.php#windows

から、Imagemagickをダウンロードしてインストールしておく必要がある。 そのときに、convert コマンドも忘れずにインストールしておく。 GIFアニメ作成テスト用のノートブックを

https://gist.github.com/genkuroki/516e1a87a44a3bac22125e9cff7d434c

で公開してある(このノートの下の方にもGIFアニメ作成のためのコードの例がある)。そのテスト用ノートブックを使用するためには、

Pkg.add("Plots")

だけではなく、

Pkg.add("Iterators")

も前もって実行しておく必要がある。私の場合には巨大パッケージの

Pkg.add("DifferentialEquations")

経由で Iterators パッケージがインストールされていたのだが。

DifferentialEquationsパッケージは巨大なので、常微分方程式を数値的に解きたいだけの人は

Pkg.add("Sundials")

のみを実行しておけば十分だと思う。

必要なパッケージを必要になったときに入れれば問題ない。

GIF動画を作るだけならば、Imagemagickさえインストールしてあれば十分で、Plots パッケージを入れる必要はない。 このノートの下の方にその方法が書いてある。

Nbextensions のインストール

次をコマンドライン(コマンドプロンプト)で実行して、Jupyter Notebook に便利な Nbextensions を入れた。

c:\Anaconda3\Scripts\conda install -c conda-forge jupyter_contrib_nbextensions

Nbextensions に含まれる Gist-it を GitHub Gist との連携のために利用できる。

https://github.com/ipython-contrib/jupyter_contrib_nbextensions/tree/master/src/jupyter_contrib_nbextensions/nbextensions/gist_it

さらに、Select CodeMirror Keymap を利用すればキーバインディングを emacs 風にしたり、vi 風ににしたりできる。

https://github.com/aiguofer/jupyter_contrib_nbextensions/tree/master/src/jupyter_contrib_nbextensions/nbextensions/select_keymap

結局、使わないことにしたが。

GitHub Gist との連携

GitHub Gist と Jupyter notebook を nbextensions の Gist-it 経由で連携させると、Jupyter notebook で編集した結果をワンボタン(+α)で GitHub Gist に保存してバージョン管理をできるようになります。

(1) https://github.com にアクセスして、GitHub のアカウントを保有していない場合には、Sign up してアカウントを取得する。

(2) https://github.com から Sign in して、右上の View profile and more のメニューから Settings を選択する。

(3) 左下の Personal access tokens をクリック。

(4) 右上の Generate new ボタンをクリック。

(5) Token description に Create gists などと書き、 gist (Create gists)にチェックを入れてから、 generate token ボタンをクリック。

(6) 表示されたアクセストークンをコピー。失敗したら(5)からやり直す。

(7) Jupyter notebook を開き、Nbextensions タブで、Gist-it にチェックを入れる。

(8) Github personal access token に6でコピーしたアクセストークンを貼り付ける。

Gists default to publicにもチェックを入れておくことがおすすめ。

失敗したら、(5)からやり直す。

(9) Jupyter notebook の Files タブからノートをどれか開き、 Gist-it のボタンを押して、Gist への投稿をできるかどうかを確認する。

(10) https://gist.github.com の See all of your gists をクリックすれば、 保存したファイル達の一覧を見ることができる。

(11) Gistに保存したノートを変更した後に再度 Gist-it のボタンを押すと、 すでに投稿してあったファイルがそれに更新されることを確認する。

以上によって、Jupyter notebook で作成したノートをワンボタン+αの手間で GitHub Gist に保存して、 簡単なバージョン管理をできるようになりました。

Emacs 風のキー配置にする

Jupyter notebook を開き、Nbextensions タブで Select CodeMirror Keymap にチェックを入れる。

各ノートブックの Edit メニューの Keymaps で Emacs を選択する。

これでキーバインディングが Emacs 風になった。

しかし、デフォルトのキーバインディングの方が便利な部分もあるので使わないことにした。

代わりに Keyhac と fakeymacs を使うことにした。

(1) https://sites.google.com/site/craftware/keyhac-ja から Keyhac for Windows ver 1.76 をダウンロードして、展開して、適当なフォルダに配置し、 keyhac.exe を起動した。

(2) https://github.com/smzht/fakeymacs から config.py を取得し、

C:\Users\genkuroki\AppData\Roaming\Keyhac\config.py

を config-org.py にリネームし、このフォルダに移動した。 config.py の中身は適当にカスタマイズして使うことになる。

(3) Keyhac のタスクトレイアイコンを右クリックして設定をリロードした。

これであちこちで Emacs 風のキーバインディングを使えるようになった。

ただし、C-k の動作には注意が必要。 C-k で複数行を切り取るためにはマウスで指定すればよい。

(4) Google Chrome のショートカットの一部を Keyconfig 拡張を導入して無効にした。

https://chrome.google.com/webstore/detail/keyconfig/okneonigbfnolfkmfgjmaeniipdjkgkl

から Keyconfig をインストールし、 Keyconfig のオプションの設定で、 たとえば C-k をアクションなしで登録すれば、 Chrome内での C-k ショートカットを無効にできる。

追記(2017-07-08): 現在はEmacs風のキーバインディングを Jupyter notebook ではあまり使っていない。

Jupyter Notebook へのカーネルの追加方法

2017年7月19日に追加

この節は Windows 限定の解説。

まず、

C:\Users\username\AppData\Roaming\jupyter\kernels

のような名前の自分のフォルダの中を見て下さい。私の場合には

C:\Users\genkuroki\AppData\Roaming\jupyter\kernels

です。そこには

julia-0.6

のような名前のフォルダがあるはずです。そのフォルダの中身の真似をして別のフォルダを作れば Jupyter notebook に新しいカーネルを追加できます。

例として、Julia をオプション -p auto を付けて起動するカーネルを追加してみましょう。このオプションを追加して Julia を起動すると、CPUがマルチスレッドに対応しているとき、Julia から並列処理の機能を最初から使えるようになります。非常に便利です。

(1) フォルダ julia-0.6 をコピーして、julia-0.6-pauto のような名前に変える。

(2) julia-0.6-pauto\kernel.json の中身を次のように変更する。

{
  "display_name": "Julia 0.6.0 procs auto",
  "argv": [
    "C:\\Julia-0.6.0\\bin\\julia.exe",
    "-i",
    "-p",
    "auto",
    "--startup-file=yes",
    "--color=yes",
    "C:\\JuliaPkg\\v0.6\\IJulia\\src\\kernel.jl",
    "{connection_file}"
  ],
  "language": "julia"
}

(3) このようにしてから、Jupyter を起動すると Julia 0.6.0 procs auto という名のカーネルが使用可能になっている。

(4) そのカーネルを削除したい場合には作ったフォルダを削除すればよい。

Juliaでのプロセスの追加・削除に仕方

2018年1月24日に追記

上のように julia -p auto でJuliaを起動しておけば最初から並列処理を利用できるのですが, そうしなくても, addprocs() を実行して -p auto と同じようにプロセスを追加して並列処理を楽しむことができます. プロセスのリストを得るには procs()、ワーカーのリストを得るには workers()、 プロセスの個数を得るには nprocs()a番からb番までのプロセスをまとめて削除するには rmprocs(a:b) を実行します。

Anaconda3のアップデート

2017年7月25日追記

Anaconda3に含まれるPythonパッケージのアップデートには

C:\Anaconda3\Scripts\conda.exe update --all

を実行し、アップデートされるパッケージの一覧が表示されるので、それで問題がないならば y と答える。

Anaconda の管理には conda コマンドを使用します。

https://www.google.co.jp/search?q=Anaconda+conda+%E4%BD%BF%E3%81%84%E6%96%B9

RISEのインストール

2017年7月27日追記

Jupyter notebook に RISE をインストールするためには以下をコマンドラインから実行する。

pip install RISE
jupyter-nbextension install rise --py --sys-prefix
jupyter-nbextension enable rise --py --sys-prefix

ただし、私の環境では C:\Anaconda3\Scripts にPATHが通してあり、そこの pip とJupyter-nbextension が実行される。

RISE はプレゼンテーション用の Nbextension である。詳しくは次のリンク先を参照せよ。

http://qiita.com/cvusk/items/d425751ba663dc8c6517

そこに書いてある通りで、インストールには10秒かかりません。

Rとの連携

2017年7月30日追記

(1) まだRをインストールしていない人は次のリンク先を参考にRをインストールする。

http://qiita.com/FukuharaYohei/items/8e0ddd0af11132031355

私はRStudioとRtoolsもインストールした。

他にもRの側でggplot2などのパッケージもインストールしておいた。

(2) Rのバイナリが置いてあるディレクトリにPATHを通しておく。

(3) Juliaの側で次を実行する:

Pkg.add("RCall")

これでRをJuliaから使う準備が完了した。

(4) ドキュメントを読む。

https://github.com/JuliaInterop/RCall.jl

http://juliainterop.github.io/RCall.jl/latest/

(5) 次のリンク先のノートブックの内容を実行できるかどうかを確認する。

https://gist.github.com/genkuroki/c72aa29f24156e46c7564852e4f36c9a

RをJupyterから使う方法

次のリンク先を参考にした。

https://irkernel.github.io/installation/

http://qiita.com/piruty_joy/items/498ee16de62879e5a949

https://github.com/IRkernel/IRkernel

https://teratail.com/questions/70234

RGuiで以下を実行する。

install.packages(c('repr', 'IRdisplay', 'evaluate', 'crayon', 'pbdZMQ', 'devtools', 'uuid', 'digest'))
devtools::install_github('IRkernel/IRkernel')
IRkernel::installspec()

どこからパッケージをインストールするかを聞かれたら、Japan (Tokyo)を選択しておけばよいでしょう。

これだけで、Jupyter notebook からカーネルとして R を選択できるようになりました。

適切にインストールされたかどうかの確認は、私の場合には以下のディレクトリを見ると分かりました。 上の作業を実行すると以下のフォルダにJupyter用の設定がインストールされた表示されます。

C:\Users\genkuroki\AppData\Roaming\jupyter\kernels\ir\

そこには

kernel.js
kernel.json
logo-64x64.png

の3つのファイルがあり、kernel.json の中身は

{
  "argv": ["C:/PROGRA~1/R/R-34~1.1/bin/x64/R", "--slave", "-e", "IRkernel::main()", "--args", "{connection_file}"],
  "display_name": "R",
  "language": "R"
}

kernel.js の中身は結構長いです。

実際にRをJupyterで使ってみた例が次のリンク先にあります。

https://gist.github.com/genkuroki/6fdb22137cdd555ab63a6b9522e4b57a

RubyをJupyterから使う方法

2017年7月31日

以下のリンク先の情報を参考にした。

http://qiita.com/kozo2/items/4bfbc9524b302b06710b

http://qiita.com/mix_dvd/items/3e4305d31e7a6785fbb0

http://qiita.com/domitry/items/aa348caf993e876a7be5

正直、よくわからないことが多かったが、大体において、コマンドラインから gem コマンドで色々入れた後に

gem install specific_install
gem specific_install https://github.com/SciRuby/iruby.git
iruby register

を実行したら、JupyterからRubyが使用可能になった。

Jupyter で Ruby カーネルが死ぬ場合には Jupyter Notebook のコンソール画面に出ているエラーメッセージをよく見て、足りないパッケージを gem コマンドで入れるとうまく行くかもしれない。筆者の場合にもそれでうまく行った。手動で入れたのは

gem install czmq
gem install ffi-rzmq

だけだったと思う。

現時点での gem list --local の結果は以下の通り。

bigdecimal (default: 1.3.0)
bond (0.5.1)
czmq (0.0.1)
czmq-ffi (0.0.2)
czmq-ffi-gen (0.13.0 x64-mingw32)
cztop (0.11.4)
data_uri (0.1.0)
did_you_mean (1.1.0)
ffi (1.9.18 x64-mingw32)
ffi-rzmq (2.0.5)
ffi-rzmq-core (1.0.6)
gist (4.6.1)
gisty (0.2.8)
io-console (default: 0.4.6)
iruby (0.3)
json (default: 2.0.2)
mimemagic (0.3.2)
minitest (5.10.1)
multi_json (1.12.1)
net-telnet (0.1.1)
openssl (default: 2.0.3)
power_assert (0.4.1)
psych (default: 2.2.2)
rake (12.0.0)
rdoc (default: 5.0.0)
specific_install (0.3.3)
test-unit (3.2.3)
xmlrpc (0.2.1)

しかも、Jupyter Notebook のコンソール画面に次の警告が出ているので正常なインストールに失敗している可能性がある。

WARNING: ::CZMQ::FFI is not available without libczmq.

SoS を Anaconda3 から使う方法

2018-01-27の追記

まず、以下をじっくり閲覧する。YouTube にあるデモンストレーションの画面の中にも途中でエラーが出ている部分が見付かる。自分自身がやったときに驚かないようにそういうことにもチェックを入れておく。

https://www.youtube.com/watch?v=TxcPwyCVa8Y

https://vatlab.github.io/sos-docs/#runningsos

以下をコマンドラインから実行した.

pip install sos
pip install sos-pbs
pip install sos-notebook
pip install sos-python
pip install sos-r
pip install sos-julia
conda install -c conda-forge feather-format

これで Anaconda3 で SoS を使えるようになった。 SoS は Python 3.6 以上を要求するので注意すること。

Julia で SoS を利用する場合にはさらに

Pkg.add("Feather")
Pkg.add("DataFrames")
Pkg.add("NamedArrays")

も実行しておく。さらに R の方でも

install.packages('feather')

を実行しておいた。ただし、Julia も R も Jupyter で使えるようになっていることが前提である。

https://www.youtube.com/watch?v=_LSQr3DHBpU

https://vatlab.github.io/sos-docs/#introduction

複数の Julia を Jupyter で利用できるようにしている場合の注意

私の場合には Julia v0.5.2 と Julia v0.6.2 を併用しているので、SoS ノートブックを起動時にどちらを選ぶかの選択のポップアップが常に出るようになってしまった。私はそれが嫌なので、

C:\Users\genkuroki\AppData\Roaming\jupyter\kernels\julia-0.5

Julia-0.5-old に書き換えて

C:\Users\genkuroki\AppData\Roaming\jupyter\kernels\julia-0.5-old

に移動した。これとは別に

C:\Users\genkuroki\AppData\Roaming\jupyter\kernels\julia-0.6

というディレクトリがあり、こちらの下で設定されている Julia を SoS が利用するようになった。

%get X --from Julia の注意点

Julia のデータフレーム X を SoS で %get X --from Julia しようとすると失敗した。

MethodError: no method matching nullcount(::DataArrays.PooledDataArray{String,UInt8,1})

Closest candidates are:
  nullcount(::NullableArrays.NullableArray{T,1} where T) at C:\JuliaPkg\v0.6\Feather\src\Feather.jl:289
  nullcount(::Array{T,1} where T) at C:\JuliaPkg\v0.6\Feather\src\Feather.jl:290
  nullcount(::CategoricalArrays.CategoricalArray) at C:\JuliaPkg\v0.6\Feather\src\Feather.jl:291
  ...

そこで、Juliaで

import Feather: nullcount
nullcount(x::DataArrays.PooledDataArray) = count(isna.(x))

を実行して、nullcount函数を拡張したら、 %get X --from Julia がうまく行くようになった。

%put X --to Julia の注意点

SoS の変数 X の Julia への転送 %put X --to Julia は X がデータフレームの場合にはどうしてもうまく行かなかった。理由は不明。しかし、 X が単純な配列の場合には問題なく %put が実行できた。

データフレームが鬼門。

付録:Juliaの使用例

以下を実行するには

Pkg.add("PyPlot")
Pkg.add("SymPy")

などが必要。

筆者の GitHub Gist では大量の使用例が公開されている。

https://gist.github.com/genkuroki

In [2]:
# 簡単な数式処理をできる

using SymPy
using PyPlot
ae()=PyPlot.axes()[:set_aspect]("equal") #プロットのアスペクト比を1:1にする函数
Out[2]:
ae (generic function with 1 method)
In [3]:
# 楕円曲線暗号で有名なEdwards曲線をプロット

x, y = symbols("x y") # 数式処理用に変数 x,y を準備
edwards=x^2+y^2-1+20x^2*y^2 # Edwards 曲線の定義式
display(edwards) # display函数で綺麗に数式を表示
plot_implicit(edwards,(x,-1.5,1.5),(y,-1.5,1.5))
ae() # この行をコメントアウトするとプロットの縦横比が1:1でなくなる
$$20 x^{2} y^{2} + x^{2} + y^{2} - 1$$
In [4]:
# 変な曲線

x, y = symbols("x y")
n=5
m=n+2
f=x*prod([x^2-i^2 for i in 1:n])
f-=2*n*subs(f,x,y)
display(f)
plot_implicit(f,(x,-m,m),(y,-m,m))
ae()
$$x \left(x^{2} - 25\right) \left(x^{2} - 16\right) \left(x^{2} - 9\right) \left(x^{2} - 4\right) \left(x^{2} - 1\right) - 10 y \left(y^{2} - 25\right) \left(y^{2} - 16\right) \left(y^{2} - 9\right) \left(y^{2} - 4\right) \left(y^{2} - 1\right)$$
In [5]:
# 不定積分

x, y = symbols("x y")
integrate(x^y,x)
Out[5]:
$$\begin{cases} \frac{x^{y + 1}}{y + 1} & \text{for}\: y \neq -1 \\\log{\left (x \right )} & \text{otherwise} \end{cases}$$
In [6]:
# 不定積分

x = symbols("x")
integrate(1/sqrt(1-x^2),x)
Out[6]:
$$\operatorname{asin}{\left (x \right )}$$
In [7]:
# 定積分

x = symbols("x", real=true)
integrate(1/(1+x^2),(x,0,oo))
Out[7]:
$$\frac{\pi}{2}$$
In [8]:
# ζ(12)

n = symbols("n", integer=true)
summation(1/n^12,(n,1,oo))
Out[8]:
$$\frac{691 \pi^{12}}{638512875}$$
In [9]:
# 複素函数のベクトル場表示

using PyPlot
plotvf(z,w) = plt[:quiver](real(z),imag(z),real(w)./abs.(w),-imag(w)./abs.(w)) #複素函数z→wのベクトル場をプロット
plotstream(z,w) = plt[:streamplot](real(z),imag(z),real(w),-imag(w)) #複素函数z→wの流れをプロット
Out[9]:
plotstream (generic function with 1 method)
In [10]:
x = [-2:0.2:2;]' # xは縦ベクトルでなければいけない
y = x' # yは横ベクトル 
z = x .+ y.*im # imは虚数単位、このように足すと自動的に正方行列になる
w = (-1-im)./z # w=(-1-i)/z
plotvf(z,w) # ベクトル場の作図
plotstream(z,w) # 流れの作図
PyPlot.axes()[:set_aspect]("equal") # アスペクト比を1:1に
In [11]:
x = [-2.5:0.2:2.5;]' # xは縦ベクトルでなければいけない
y = [-1.5:0.2:1.5;]  # yは横ベクトル 
z = x .+ y.*im # imは虚数単位、このように足すと自動的に正方行列になる
w = @. 1/(z+1) - 1/(z-1) # z=-1に正の電荷、z=-1に負の電荷
plotvf(z,w) # ベクトル場の作図
plotstream(z,w) # 流れの作図
PyPlot.axes()[:set_aspect]("equal") # アスペクト比を1:1に
In [12]:
# 3D plot

using PyPlot
using Distributions
linspace(start, stop, length) = range(start, stop=stop, length=length)

a=[
    2. -1.
    -1. 2.
]
n=101
x=linspace(-5,5,n) # -5:0.1:5 と同じ
y=linspace(-5,5,n)
z=zeros(n,n)
for i in 1:n
    for j in 1:n
        z[i,j]=pdf(MvNormal(a),[x[i];y[j]])
    end
end

surf(x, y, z, cmap=ColorMap("CMRmap_r"))
Out[12]:
PyObject <mpl_toolkits.mplot3d.art3d.Poly3DCollection object at 0x000000003E6FF9B0>

複素函数の流れの図のアニメーション

In [13]:
# GIGアニメーションファイル test.gif の作成
# Imagemagickのconvertコマンドを使う

using PyCall
#@pyimport matplotlib.animation as anim
using PyPlot
using Base64
using Printf

function showgif(filename)
    open(filename) do f
        base64_video = base64encode(f)
        display("text/html", """<img src="data:image/gif;base64,$base64_video">""")
    end
end

fig = figure()
ax = PyPlot.axes()

x = [-1.5:0.05:1.0;]
y = [-1.0:0.05:1.0;]
z = x' .+ im*y
w0 = sqrt.(z.+1)./z

# plotw has period 1.
# plotw(t+1) == plotw(1)
function plotw(t)
    clf()
    title("\$t = $t\$")
    xlim(-1.4,0.9)
    ylim(-0.9,0.9)
    w = exp(pi*im*t)*w0
    streamplot(x,y,real(w),-imag(w))
    PyPlot.axes()[:set_aspect]("equal")
end

n=10 # frame/loop
l=1 # loop
interval=200 # milli seconds
filename = "test" # filename

withfig(fig) do
    for k in 1:n*l
        plotw(k/n)
        savefig(filename*@sprintf("_%04d",k), bbox_inches="tight")
    end
end

run(`convert -delay $(interval/10) -loop 0 $(filename)_\*.png $filename.gif`)
#run(`magick -delay $(interval/10) -loop 0 $(filename)_\*.png $filename.gif`)

showgif("$filename.gif")