はじめに
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 fix
のDownload
ボタンから修復ツールをインストールし、実行する必要がある。この問題は、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を管理者権限で起動し、さらにファイアウォールは無効にした。
julia> using Conda
julia> Conda.add("jupyter")
julia> Conda.update()
julia> ENV["JUPYTER"]="C:\\path\\to\\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`