Pkg
Pkg は Julia 組み込みのパッケージマネージャです。パッケージのインストール・更新・削除といった処理を行います。
ここにあるのは Pkg の非常に簡単な紹介です。Project.toml
・Manifest.toml
・パッケージバージョンの互換性 ([compat]
)・環境・レジストリなどに関する詳しい情報は https://julialang.github.io/Pkg.jl/v1/ にある完全なマニュアルを参照してください。
ここにあるのは Julia のパッケージマネージャ Pkg の手短な概観です。Julia を使い始めたユーザーが Pkg の基本的な機能に慣れるのに役立つはずです。
Pkg には REPL が付属します。Julia REPL で ]
をタイプすると Pkg REPL に入ることができます。Julia REPL に戻るにはバックスペースまたは ^C
をタイプしてください。
このガイドは Pkg コマンドを実行するのに Pkg REPL を使います。対話的でない利用には Pkg API を推奨します。Pkg API はドキュメントの API リファレンスの節に完全にドキュメントされています。
Pkg REPL に入ると、次のようなプロンプトが表示されるはずです:
(v1.1) pkg>
パッケージの追加は add
で行います:
(v1.1) pkg> add Example
ガイドが散漫にならないよう、ここでは Pkg REPL の出力を省略します。詳しい情報が必要な場合は次の節か Pkg のマニュアルを参照してください。
複数のパッケージをまとめて指定することもできます:
(v1.1) pkg> add JSON StaticArrays
パッケージの削除は rm
で行います:
(v1.1) pkg> rm JSON StaticArrays
ここまでに扱ったパッケージは登録されたパッケージでした。Pkg には登録されていないパッケージを扱う機能もあります。登録されていないパッケージを追加するには、URL を指定します:
(v1.1) pkg> add https://github.com/JuliaLang/Example.jl
このパッケージを削除するには rm
を使います:
(v1.1) pkg> rm Example
インストールされたパッケージを更新するには update
を使います:
(v1.1) pkg> update Example
インストールされたパッケージを全て更新するには、引数を付けずに update
を実行します:
(v1.1) pkg> update
これでパッケージの追加・更新・削除というパッケージ管理の基本処理が説明できました。他のパッケージマネージャを使ったことがあれば、こういった処理はすぐに理解できるはずです。伝統的なパッケージマネージャと比べたときに Pkg が持つ大きな強みは、依存関係の管理に環境を使う方式です。
Pkg REPL プロンプトの (v1.1)
に気が付いたかもしれません。これはアクティブ環境が v1.1
であることを意味します。アクティブ環境とは add
, rm
, update
といった Pkg
コマンドが改変する環境のことです。
実験用に新しい環境を設定してみましょう。アクティブ環境を設定するには activate
を使います:
(v1.1) pkg> activate tutorial
[ Info: activating new environment at `/tmp/tutorial/Project.toml`.
Pkg からの出力は新しい環境が /tmp/tutorial
に作られたことを示しています。
新しいアクティブ環境に移ったことを受けて Pkg は REPL プロンプトを更新します:
(tutorial) pkg>
アクティブ環境に関する情報を取得するには status
を使います:
(tutorial) pkg> status
Status `/tmp/tutorial/Project.toml`
(empty environment)
/tmp/tutorial/Project.toml
がアクティブ環境のプロジェクトファイルの位置です。プロジェクトファイルとは Pkg が環境のメタデータを保存する場所です。新しい環境が空であることに注目してください。パッケージを追加して何が起こるかを見ましょう:
(tutorial) pkg> add Example
...
(tutorial) pkg> status
Status `/tmp/tutorial/Project.toml`
[7876af07] Example v0.5.1
環境 tutorial
に依存プロジェクト Example
が追加されたことが分かります。
この後 Example
を使っていくうちに、Example
に新しい機能を追加したくなったとします。どうすればソースコードを変更できるでしょうか? develop
コマンドを使えば、Example
パッケージを git clone
できます:
(tutorial) pkg> develop --local Example
...
(tutorial) pkg> status
Status `/tmp/tutorial/Project.toml`
[7876af07] Example v0.5.1+ [`dev/Example`]
status
の結果が変わりました。dev/Example
は新しくクローンされた Example
の位置を指しています。/tmp/tutorial
ディレクトリを確認すれば、次のファイルがあることが分かるでしょう:
tutorial
├── dev
│ └── Example
├── Manifest.toml
└── Project.toml
この後 Julia は登録されたバージョンの Example
ではなく tutorial/dev/Example
に保存されたバージョンを利用します。
これを試してみましょう。まずファイル tutorial/dev/Example/src/Example.jl
を変更し、簡単な関数を加えます:
plusone(x::Int) = x + 1
Julia REPL に戻って、このパッケージを読み込みます:
julia> import Example
パッケージを読み込めるのは Julia セッション中に一度だけです。現在の Julia セッション で import Example
を実行していた場合には、Julia を再起動して activate tutorial
を Pkg REPL から実行し直す必要があります。このプロセスは Revise.jl を使うと大幅に簡略化できますが、そのセットアップはこのガイドの範囲を超えます。
これで Julia は新しいコードを読み込むはずです。試してみましょう:
julia> Example.plusone(1)
2
ここで考えが変わって、斯く美しきコードはこの世界に相応しくないと判断したとします。そのときはローカルにあるクローンの利用を停止し登録されたバージョンを使うよう Pkg に伝えます。この処理を行うのは free
コマンドです:
(tutorial) pkg> free Example
tutorial
での実験が終わったときは、引数を付けずに activate
を呼べばデフォルト環境に戻れます:
(tutorial) pkg> activate
(v1.1) pkg>
よく分からなくなったときは Pkg のヘルプを使ってください:
(v1.1) pkg> ?
利用可能なコマンドとその簡単な説明のリストが表示されるでしょう。コマンド名を続ければ詳細なヘルプを閲覧できます:
(v1.1) pkg> ?develop
このガイドでは Pkg を使い始める最初の一歩を紹介しました。Pkg は他にも強力なパッケージ管理機能を備えています。マニュアルを読んでみてください!