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のプリコンパイルに失敗した旨が表示されていた。今のところ原因は不明。

【追記】Julia 1.0.0でJupyterを起動するときのメモ

 Juliaの最新版1.0.0をインストールし、REPLからJupyter notebookを立ち上げたところ、カーネルが死んでしまう状態となった。これについて、Doesn't work on windows + Julia 0.7 #693を参考に以下を試したところ、Jupyter notebookでJulia 1.0.0が使用可能になった。

pkg> free IJulia
pkg> up

【追記2】Windows10+Julia 1.0.0でJupyterを起動するときのメモ

 Windows10では、公式のJulia 1.0.0ダウンロードページにも記述してあるように、上記で述べたような最新版Windows Management Frameworkのインストールや、TLS "Easy Fix" updateが必要ない。しかしながら、add IJuliaでパッケージを追加したのち、build IJuliaでパッケージのビルドを試みたところ、以下のようにエラーが生じた。

(v1.0) pkg> add IJulia
  Updating registry at `C:\Users\username\.julia\registries\General`
  Updating git-repo `https://github.com/JuliaRegistries/General.git`
 Resolving package versions...



(v1.0) pkg> free IJulia



(v1.0) pkg> up



(v1.0) pkg> build IJulia
  Building Conda ──→ `C:\Users\username\.julia\packages\Conda\hsaaN\deps\build.log`
  Building ZMQ ────→ `C:\Users\username\.julia\packages\ZMQ\ABGOx\deps\build.log`
  Building MbedTLS  `C:\Users\username\.julia\packages\MbedTLS\mkHpa\deps\build.log`
  Building IJulia ─→ `C:\Users\username\.julia\packages\IJulia\4VL8h\deps\build.log`
 Error: Error building `IJulia`:
 Traceback (most recent call last):
   File "C:\Users\username\Anaconda3\Scripts\jupyter-kernelspec-script.py", line 6, in <module>
     from jupyter_client.kernelspecapp import KernelSpecApp



 ImportError: DLL load failed: 指定されたモジュールが見つかりません。
 Traceback (most recent call last):
   File "C:\Users\username\Anaconda3\Scripts\jupyter-kernelspec-script.py", line 6, in <module>
     from jupyter_client.kernelspecapp import KernelSpecApp



 ImportError: DLL load failed: 指定されたモジュールが見つかりません。
 [ Info: Found Jupyter version 4.4.0: C:\Users\username\Anaconda3\Scripts\jupyter.exe
 [ Info: Installing Julia kernelspec julia-1.0
 ERROR: LoadError: failed process: Process(`'C:\Users\username\Anaconda3\Scripts\jupyter-kernelspec.exe' install --replace --user 'C:\Users\TENTOU~1\AppData\Local\Temp\julia-1.0'`, ProcessExited(1)) [1]
 Stacktrace:
  [1] error(::String, ::Base.Process, ::String, ::Int64, ::String) at .\error.jl:42
  [2] pipeline_error at .\process.jl:705 [inlined]
  [3] #run#504(::Bool, ::Function, ::Cmd) at .\process.jl:663
  [4] run at .\process.jl:661 [inlined]
  [5] #installkernel#4(::String, ::Function, ::String) at C:\Users\username\.julia\packages\IJulia\4VL8h\deps\kspec.jl:78
  [6] installkernel(::String) at C:\Users\username\.julia\packages\IJulia\4VL8h\deps\kspec.jl:36
  [7] top-level scope at logging.jl:310
  [8] top-level scope at logging.jl:309
  [9] top-level scope at C:\Users\username\.julia\packages\IJulia\4VL8h\deps\build.jl:38
  [10] include at .\boot.jl:317 [inlined]
  [11] include_relative(::Module, ::String) at .\loading.jl:1041
  [12] include(::Module, ::String) at .\sysimg.jl:29
  [13] include(::String) at .\client.jl:388
  [14] top-level scope at none:0
 in expression starting at C:\Users\username\.julia\packages\IJulia\4VL8h\deps\build.jl:9
 @ Pkg.Operations C:\cygwin\home\Administrator\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.0\Pkg\src\Operations.jl:1069

そこで、Problem installing IJulia on Windows 10 #674を参考にして、以下のようにコマンドを入力したところ、IJuliaをビルドできた。なお、念のため、Juliaを管理者権限で起動し、さらにファイアウォールは無効にした。

using Conda
Conda.add("jupyter")
Conda.update()
ENV["JUPYTER"]="C:\\path\\Anaconda3\\share\\jupyter"
Pkg.build("IJulia")

以下、コマンド実行の記録である。

julia> using Conda
julia> Conda.add("jupyter")
[ Info: Downloading miniconda installer ...
[ Info: Installing miniconda ...
[ Info: Running `conda config --add channels defaults --force` in root environment
Warning: 'defaults' already in 'channels' list, moving to the top
[ Info: Running `conda update -y conda` in root environment
Solving environment: done



julia> Conda.update()
[ Info: Running `conda update -y --all conda` in root environment
Solving environment: done



julia> ENV["JUPYTER"]="C:\\Users\\username\\Anaconda3\\share\\jupyter"
"C:\\Users\\username\\Anaconda3\\share\\jupyter"

(v1.0) pkg> add IJulia Resolving package versions...
  Updating `C:\Users\username\.julia\environments\v1.0\Project.toml`
 [no changes]
  Updating `C:\Users\username\.julia\environments\v1.0\Manifest.toml`
 [no changes]

(v1.0) pkg> build IJulia
  Building Conda ──→ `C:\Users\username\.julia\packages\Conda\hsaaN\deps\build.log`
  Building ZMQ ────→ `C:\Users\username\.julia\packages\ZMQ\ABGOx\deps\build.log`
  Building MbedTLS  `C:\Users\username\.julia\packages\MbedTLS\mkHpa\deps\build.log`
  Building IJulia ─→ `C:\Users\username\.julia\packages\IJulia\nBp96\deps\build.log`

参考