Julia
Jupyter

WindowsでJuliaをJupyter notebookから使えるようにするまで

はじめに

 Windows環境において、Julia言語をインストールし、Jupyter notebookで使用可能にする方法については、様々な場所で解説記事が見られるが、思いのほか苦戦したので備忘録としてまとめた。

導入環境

  • OS:Windows7 Home Premium 64bit
  • Anaconda3をインストール済みであり、Jupyter notebookは使用可能な状態

導入方法

Juliaのインストール

 最新版のJuliaを公式サイトからダウンロードし、インストールする。現時点ではv0.6.2が最新である。インストールしたディレクトリをJuliaDirとする。

環境変数設定

 コントロールパネル/システム/システムの詳細設定/環境変数から設定を行う。ユーザー変数とシステム変数の2つがあり、全ユーザーに対して設定したいのであれば、システム変数に対して設定を行う。以下、システム変数に対する設定を記載する。

  • 新規の変数として以下の2つを作成する。

変数名:JUPYTER 変数値:AnacondaDir\Scripts\jupyter.exe
変数名:JULIA_PKGDIR 変数値:JuliaPkgDir

  • システム変数に既に設定されているPathの最後尾に、新規作成した変数名を%で囲んで追加する。なお、変数は;で区切ること。

%追加済みのPath%; %JUPYTER%; %JULIA_PKGDIR%

ここで、AnacondaDirはAnaconda3がインストールされたディレクトリ、JuliaPkgDirはJuliaのパッケージをインストールするディレクトリである。JuliaPkgDirは予め作成しておくとよい。
 私が主に参照した記事では、変数を新規作成せずともPathに追加するだけで良いとの内容が多かったが、私の場合は上記のようにしなければ設定がうまくできなかった。
 また、Juliaをコマンドプロンプトから呼び出せるようにするためには、システム変数のPathの最後にJuliaDirを追記すればよい。これに関しては、上記のように新規に変数を作成しなくても動作確認ができた。

パッケージの初期インストール

 Juliaを管理者権限で起動し、Pkg.init()を実行する。このコマンドは、JuliaPkgDirにパッケージデータをダウンロードし、Pkg系コマンドを使用可能な状態にするためのものである。この作業は最初の一回で良い。

julia> Pkg.init()
INFO: Initializing package repository JuliaPkgDir\v0.6
INFO: Cloning METADATA from https://github.com/JuliaLang/METADATA.jl

上記の表示で終了すればOK。環境変数で設定したJuliaPkgDir内に、v0.6というディレクトリが作成され、パッケージがインストールされている。なお、以下のエラー

ERROR: GitError(Code:ECERTIFICATE, Class:OS, user cancelled certificate check: )

が生じた場合は、リンク先Easy fixDownloadボタンから修復ツールをインストールし、実行する必要がある。この問題は、julia-git-errorに挙げられている。TLS 1.1またはTLS 1.2の修復が必要である模様。修復を行った後、Pkg.init()を実行すればよい。
 また、環境変数設定がうまくいっていない場合、以下のように表示され、ユーザーディレクトリ直下に.julia\v0.6というパッケージ用ディレクトリが作成される。

INFO: Initializing package repository C:\Users\username\.julia\v0.6`

パッケージIJuliaのインストール

 Jupyter notebookでJuliaを使用するために、IJuliaをインストールする。JuliaでPkg.add("IJulia")を実行する。以下は私のPCでの実行例である。

julia> Pkg.add("IJulia")
INFO: Cloning cache of BinDeps from https://github.com/JuliaLang/BinDeps.jl.git
INFO: Cloning cache of BinaryProvider from https://github.com/JuliaPackaging/BinaryProvider.jl.git
INFO: Cloning cache of Compat from https://github.com/JuliaLang/Compat.jl.git
INFO: Cloning cache of Conda from https://github.com/JuliaPy/Conda.jl.git
INFO: Cloning cache of IJulia from https://github.com/JuliaLang/IJulia.jl.git
INFO: Cloning cache of JSON from https://github.com/JuliaIO/JSON.jl.git
INFO: Cloning cache of MbedTLS from https://github.com/JuliaWeb/MbedTLS.jl.git
INFO: Cloning cache of Nullables from https://github.com/JuliaArchive/Nullables.jl.git
INFO: Cloning cache of SHA from https://github.com/staticfloat/SHA.jl.git
INFO: Cloning cache of URIParser from https://github.com/JuliaWeb/URIParser.jl.git
INFO: Cloning cache of ZMQ from https://github.com/JuliaInterop/ZMQ.jl.git
INFO: Installing BinDeps v0.8.8
INFO: Installing BinaryProvider v0.3.0
INFO: Installing Compat v0.64.0
INFO: Installing Conda v0.7.1
INFO: Installing IJulia v1.8.0
INFO: Installing JSON v0.17.2
INFO: Installing MbedTLS v0.5.8
INFO: Installing Nullables v0.0.5
INFO: Installing SHA v0.5.7
INFO: Installing URIParser v0.3.1
INFO: Installing ZMQ v0.6.0
INFO: Building Conda
INFO: Building MbedTLS
Info: Downloading https://github.com/quinnj/MbedTLSBuilder/releases/download/v0.6/MbedTLS.x86_64-w64-mingw32.tar.gz to JuliaPkgDir\v0.6\MbedTLS\deps\usr\downloads\MbedTLS.x86_64-w64-mingw32.tar.gz...
Info: using prebuilt binaries
INFO: Building ZMQ
Info: Downloading https://github.com/JuliaInterop/ZMQBuilder/releases/download/v4.2.5+2/ZMQ.x86_64-w64-mingw32.tar.gz to JuliaPkgDir\v0.6\ZMQ\deps\usr\downloads\ZMQ.x86_64-w64-mingw32.tar.gz...
INFO: Building IJulia
INFO: Found Jupyter version 4.4.0: AnacondaDir\Scripts\jupyter.exe
INFO: Installing Julia kernelspec julia-0.6
Error executing Jupyter command 'kernelspec': [Errno 'jupyter-kernelspec' not found] 2
[InstallKernelSpec] Removing existing kernelspec in C:\Users\username\AppData\Roaming\jupyter\kernels\julia-0.6
[InstallKernelSpec] Installed kernelspec julia-0.6 in C:\Users\username\AppData\Roaming\jupyter\kernels\julia-0.6
INFO: Package database updated

kernelspecでエラーが生じているものの、その後の作業に特に影響はなかった。ここで重要なのは、

INFO: Found Jupyter version 4.4.0: AnacondaDir\Scripts\jupyter.exe

の表示である。環境変数JUPYTERを作成したことにより、すでにAnaconda3でインストールされていたJupyter notebookが使用されるようになっている。この環境変数設定を行っていない場合、Juliaは自動的にminiconda(Anaconda2相当)をインストールして、Jupyter notebookの設定を行ってしまう。また、環境変数設定がうまくいっていない場合も、同様にAnaconda2がインストールされ、以下のような表示になる。

INFO: Found Jupyter version 4.4.0: C:\Users\username\.julia\v0.6\Conda\deps\usr\Scripts\jupyter

 また、私の場合は、最初にPkg.add("IJulia")を実行した際、以下のようにエラーが生じた。

INFO: Building MbedTLS
Info: Downloading https://github.com/quinnj/MbedTLSBuilder/releases/download/v0.6/MbedTLS.x86_64-w64-mingw32.tar.gz to JuliaPkgDir\v0.6\MbedTLS\deps\usr\downloads\MbedTLS.x86_64-w64-mingw32.tar.gz...
・
・
・

===============================[ ERROR: MbedTLS ]===============================
LoadError: Could not download https://github.com/quinnj/MbedTLSBuilder/releases/
download/v0.6/MbedTLS.x86_64-w64-mingw32.tar.gz to JuliaPkgDir\v0.6\MbedTLS\
deps\usr\downloads\MbedTLS.x86_64-w64-mingw32.tar.gz while loading JuliaPkgDir\
v0.6\MbedTLS\deps\build.jl, in expression starting on line 40
================================================================================
INFO: Building ZMQ
Info: Downloading https://github.com/JuliaInterop/ZMQBuilder/releases/download/v4.2.5+2/ZMQ.x86_64-w64-mingw32.tar.gz to JuliaPkgDir\v0.6\ZMQ\deps\usr\downloads\ZMQ.x86_64-w64-mingw32.tar.gz...
・
・
・

=================================[ ERROR: ZMQ ]=================================
LoadError: Could not download https://github.com/JuliaInterop/ZMQBuilder/
releases/download/v4.2.5+2/ZMQ.x86_64-w64-mingw32.tar.gz to JuliaPkgDir\v0.6\
ZMQ\deps\usr\downloads\ZMQ.x86_64-w64-mingw32.tar.gz while loading JuliaPkgDir\
v0.6\ZMQ\deps\build.jl, in expression starting on line 30
================================================================================

INFO: Building IJulia
INFO: Found Jupyter version 4.4.0: AnacondaDir\Scripts\jupyter.exe
INFO: Installing Julia kernelspec julia-0.6
Error executing Jupyter command 'kernelspec': [Errno 'jupyter-kernelspec' not found] 2
[InstallKernelSpec] Removing existing kernelspec in C:\Users\username\AppData\Roaming\jupyter\kernels\julia-0.6
[InstallKernelSpec] Installed kernelspec julia-0.6 in C:\Users\username\AppData\Roaming\jupyter\kernels\julia-0.6

================================[ BUILD ERRORS ]================================
WARNING: MbedTLS and ZMQ had build errors.

 - packages with build errors remain installed in JuliaPkgDir\v0.6
 - build the package(s) and all dependencies with `Pkg.build("MbedTLS", "ZMQ")`
 - build a single package by running its `deps/build.jl` script
================================================================================

 パッケージMbedTLSおよびZMQのダウンロードでエラーが生じている。メッセージを確認すると、MbedTLS.x86_64-w64-mingw32.tar.gzおよびZMQ.x86_64-w64-mingw32.tar.gzをダウンロードできず、それぞれをビルドする箇所でエラーが発生しているようであった。
 この2つについて調べた結果、Build error on Windows 7 #133で同様のissueが挙げられており、Windows Management Framework 3をインストールしていないことが原因だと記載されていた。具体的には、Windows Management Framework 3のインストールで得られるWindows PowerShellと、Microsoft .Net Framework 4.5以上が必要であるとのこと。
 私はMicrosoft .Net Framework 4.5はインストール済みであったため、最新版のWindows Management Framework 4のインストールを行った。ダウンロードボタンをクリック後、Windows6.1-KB2819745-x64-MultiPkg.msu(64bit版)(32bit版の場合はWindows6.1-KB2819745-x86.msu)を選択してダウンロードおよびインストールを行った。
 インストール完了後に再起動すると、アクセサリの中にWindows PowerShellがインストールされていた。この状態で、JuliaPkgDirの中身をいったん削除し、Pkg.init()およびPkg.add("IJulia")を再度実行したところ、エラーを生じることなくインストールが完了した。

Juliaの動作確認

 Juliaが使用できるか確認するために、以下のコマンドを実行する。

ENV["PYTHON"]="AnacondaDir\\python.exe"
Pkg.add("PyPlot")

これにより、JuliaからAnaconda3のpython.exeを呼び出せるようになった。また、環境変数で設定したJuliaPkgDirにPyPlot等のパッケージがインストールされ、PyPlotでグラフをプロットできるようになった。なお、pythonのパスを指定する際は、バックスラッシュは二重にすること
 グラフのプロットができるか、以下のコマンドで確認する。

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

プロットが別ウィンドウで表示された。

Jupyter notebookからJuliaを使用する

Juliaから以下を実行する。

using IJulia
notebook()

するとJupyterが起動し、ウェブブラウザが呼びだされてJupyterのホーム画面が出てくる。あとは、Julia v0.6.2のカーネルを選択して、notebookを作成すればよい。
 なお、私は通常Jupyterを起動する際、スタートメニューのAnaconda3内に登録されているショートカットから行っているのだが、ショートカットから起動したJupyterでは、Juliaカーネルを選択して数秒後にnotebookが落ちてしまう。ターミナルには、ZMQ.jlおよびIJuliaのプリコンパイルに失敗した旨が表示されていた。今のところ原因は不明。

参考