Juliaで行こう! 〜Package閑話編〜

前座

一連の流れで、0.7以降、PkgDevが使用できない、というものがあります。

(v1.1) pkg> add https://github.com/JuliaLang/PkgDev.jl#kc/07

Commit前のBranchですが、問題なく、動作します。LICENSEもでます(笑)
いずれ、取り込まれるので、待つべし!
Commit前のBranch使うとか、やばいな、自分(笑) 「const cd = Pkg.Dir.cd」ってところで、まず落ちてたんですが、Code見ると、がっつりなくなってた。

口上

では、本編を。少し閑話的な今回のお話です。Juliaにも標準ではない便利Libraryがあります。今回はPackageに関するお話を少し。
初稿を書いていた時点は、v0.6.3のお話でしたが、今は、メインがv1.1-DEVなので、追記しつつ、進めていこうと思います。

どう探す?

まず、ぐぐる先生で、「Julia hoge」とやって、上位に出てくるPackageを覗いてみますと、githubには、先人達が記述した様々なPackageがゴロゴロしています。これは、JuliaのPackageのHostがgithubベースになっているからです。それを見て、ほうほう、そういうのがあるのか、と。
しかしながら、諸々の言語やFrameworkと同様、流行り廃りや開発者のモチベなどなど様々な理由で、開発が止まってしまった場合、JuliaのVersionが上がって、使えなくなるなんていうこともでてくることが考えられます。(OSS全般のお話かもしれませんね)
そうはいっても、個人個人に好みの問題も発生しますので、難しい問題でもあるわけです。(どうしても使いたい欲求)
ぐぐる先生とのPackage探索は、希望とするものがはっきりしているので、入力するKeywordも相応のものになっていたりますので、Hit率もあがるのでしょうが、それでも、面倒臭いって思う時もでてきます。そういう場合には、

 Julia Observer

というSiteは、どうでしょうか。カテゴライズもされていて、比較的わかりやすいのではないでしょうか、と。
今のところは、検索のみで済んではいるのですが、その先へ進むには、こういったSiteに、大いにお世話になりそうです。
個人的に、PythonとJuliaでのPackageの傾向が違ってて、面白く拝見しています(笑)例の汎用機か専用機かのお話です。

格納パス(変更したい時)

何も設定を行っていない場合、追加Packageは、ログイン直下の[.julia/]に格納されます。例えば、[/opt/julia]に変更したい場合には、以下のように行います。

$ export JULIA_PKGDIR=/opt/julia
$ julia -e 'Pkg.init()'

恒常的に切り替えたい場合には、.bashrc等への書き込みが必要となります。(source実行もしくはログインし直しは必要です)
golangっぽいというか、最近は、この手が主流なのですね。(追加のために、root権限とか嫌ですもんね、やっぱ)

追加

標準ではないPackageの追加は以下のように行います。

julia> Pkg.add("HTTP")

もしくは、

$ julia -e 'Pkg.add("HTTP")'

上記では[HTTP]に関連するPackageを追加しています。(この時は、Command Line信奉者だったのだな、と理解しました)
v0.7以降の場合は、「]」(カギカッコ)を入力し、Packageモードにします。

julia>
(v1.1) pkg> add HTTP

となります。上記の場合は、標準Packageの場合です。
標準Packageというのは、審査が通って、正式に採用されたPackageのことで、METADATA.jlに登録されたものです。
FedoraでいえばFedoraやFedora Fusionのことです。ところが、そこには、今はいない、「野良達」がいます。Fedoraで言えば、copr。(笑)
今なら、tarballであっても、Installはできますが、いずれ正式登録というのを前提としなくても、githubベースに野良Packageをルールに従った形でUpしておくのがよいと思います。 仮に、「hoge.jl」というPackageをUpしているとしましょう。この時の追加方法は、v0.6.3の場合、

julia> Pkg.clone("https://github.com/hoge/hoge.jl.git")

v0.7.0以降の場合、

(v1.1) pkg> add https://github.com/hoge/hoge.jl.git

「cloneとやったら、addね」とJuliaから言われた記憶があります(笑)

削除

Packageの削除は以下になります。以降、CommanLine表記は無しで。v0.6.3の場合は、

julia> Pkg.rm("HTTP")

v0.7.0以降の場合は、

(v1.1) pkg> rm HTTP

追加の場合も削除の場合も依存するPackageも一緒に追加されたり、削除されたりします。

テスト

追加したPackageが正しく動作するかを確認するために、Testを行います。

julia> Pkg.test("HTTP")

ここで記載するの遅い話とは思うのだが、上記のv0.6.3のCommand送りは、v0.7.0以降でも可能です。ただ、その場合には、最初に以下のように、行う必要があります。

julia> using Pkg

当然、Testのためには、

julia> using Test

実行しなければしないで、Errorがでますので、「標準なのに」と思う場合には、「Using忘れ」であると思っていいです。(言い過ぎ)
このTest、実はこれかなりよろしくて。githubを覗くか、先の格納Pathを覗くと、testというDIRがあり、その下には、Test Codeが格納されています。 PackageのDocだけだと理解が進まないな、と感じる場合、Test Codeを見ると、意外にも直感的に理解が進むのでないかな、と思います。

ビルド

Packageの中には、Julia外のLibraryを使ったりするものもあり、Juliaとそれらを繋ぐBinaryを作る必要性が出てきます。これを行ってくれるのがBuildです。
ただ、環境依存(OSの種類やVersionその他)による影響が大きく、Buildが上手くいかない場合も見受けられます。
Fedoraは、いささかその度合いが大きいようだと、Fedora使いは感じているのですが、Ubuntuの方がよいと思われます(笑)

julia> Pkg.build("Cxx")
(v1.1) pkg> build Cxx

「Cxx」というPackage通るか否かっていうのは、結構大きい話だと思います。
手元のFedora 28、通りません!(笑)

うふふ

(v1.1) pkg> activate .
(Hoge) pkg>
...
julia> using Hoge
julia> using Test
julia> @test Moge() == "Hello World"
Test Passed

julia>

What do you do?(^o^)

コメント

このブログの人気の投稿

Tabulatorで行こう! 〜ダイバー編〜

Tabulatorで行こう! 〜違うじゃん編〜

Fedoraで行こう! 〜音声合成pyttsx3編〜