3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-11-10

追記(19/10/06)
この記事は古いです。Julia v1.2がリリースされています。
v1.0では以下の記述をC:\Users\YourUserName\.julia\packages\BinaryProvider\xxxxx\src\PlatformEngines.jlに書かれているWindows用のPowerShellを使ったダウンロードコマンドの部分に読み替える。(xxxxxは英数字)
v1.2では別途curlをインストールするほうが早いです。ENV["BINARYPROVIDER_DOWNLOAD_ENGINE"]"curl"を設定すればインストールされているcurlを使用するようになります。(参考1, 参考2, 参考3)

はじめに

この記事は前回からの続きである。
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") # @info for v1.0
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") # @warn for v1.0
    end
catch e
    warn(e, prefix="WARNING(ErrorException): ") # @warn for v1.0
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の正式版リリースが楽しみだ。

参考

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?