Windows
PowerShell
Julia

WindowsへJulia(IJulia)をインストールする+Powershellでファイルをダウンロードする

はじめに

この記事は前回からの続きである。
Pkg.add("IJulia")をしたいときに認証プロキシ環境下のWindowsだといろいろ大変だったということをまとめた。

前編 / 後編(本記事)

環境

  • マシン - Windows10(64bit)
  • Anaconda3 - ver 5.0.1
  • Julia - ver 0.6.1
  • 外部ネットワークへの接続に認証プロキシサーバを経由する

手順

Step3 : パッケージを書き換える

前回までの方法でWinRPMパッケージのビルドに失敗したら、Juliaのパッケージを置くように指定したディレクトリにv0.6\WinPRM\src\WinRPM.jlというファイルが置かれていた。
このファイルのWindows用のdownload関数を丸々以下のように書き換えた。

download_engine = "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell"
dest = tempname()
info("Download to: $dest")
server = "http://hardcode-proxyserver:8080/"
credential = "\$cr=get-credential"
proxy = "\$pr=new-object net.webproxy \"$server\""
webclient = "\$wc=new-object net.webclient"
setting = "\$pr.credentials=\$cr; \$wc.proxy=\$pr; \$wc.downloadfile(\"$source\", \"$dest\")"
ps_cmd = "$credential; $proxy; $webclient; $setting"
run_cmd = `$download_engine -NoProfile -Command "$ps_cmd"`
try
    res = run(run_cmd)
    if res == nothing
        return read(dest, String), 200
    else
        warn("Download failure: $res")
    end
catch e
    warn(e, prefix="WARNING(ErrorException): ")
end
return "", 0

これは、コマンド実行の中でPowerShellを利用して以下のことをやっている。
まずはPowerShellを立ち上げてこれでダウンロードできるか確かめるとストレスがないと思う。

powershell
$source = "target.url"
$dest = "file.name"
$cr=get-credential
$pr=new-object net.webproxy "http://hardcode-proxyserver:8080/"
$wc=new-object net.webclient
$pr.credentials=$cr
$wc.proxy=$pr
$wc.downloadfile($source, $dest)

実行してみると以下のように資格情報を要求されるので、プロキシサーバに対して入力されたユーザ名とパスワードでユーザ認証を行う。
いちいち入力するのが煩わしい場合は、環境変数のHTTP_PROXYにこれらの情報を設定していると思うので、そこから取り出すようにコードを変更するといいだろう。

image.png

現状Juliaはファイルをダウンロードするのに、WindowsではURLDownloadToCacheFileというAPIを叩いている。
しかし、このAPIはインターネットエクスプローラの設定からプロキシサーバの情報を取得しているため、会社の規則などで資格情報を保存しないようにしていると認証の段階で資格情報が利用できずにファイルをダウンロードすることができない。
(私の環境ではHTTP_PROXYも保存していない)

Step4 : 再度Pkg.add("IJulia")を実行する

以下のコードを実行する。

julia
Pkg.add("IJulia")

ビルドが成功すると、以下のようにJupyter NotebookでJuliaが扱えるようになった。

image.png


おわりに

色々参考にしてPowerShellのコマンドを並べてみた。
あと、ChocolateyというWindows用のパッケージマネージャがあって、それのinstall.ps1というファイルにPowerShellでファイルをダウンロードする手順が詳しく書かれているらしい。
ともあれ、Juliaの正式版リリースが楽しみだ。


参考