4.

Julia の Pkg REPL モード起動方法(] キーで切替 / 主要コマンド / 抜け方)

編集
この記事の要点
  • Julia の REPL で ] キーを押すと Pkg モード(パッケージ管理モード)に切り替わる
  • プロンプトが julia> から (env) pkg> に変わり、add/rm/status/update がコマンド名そのままで使える
  • 抜けるときは Backspace または Ctrl-C で通常 REPL に戻る
  • ? でヘルプモード、; でシェルモード、] で Pkg モード ― 4 つの特殊モードがある
  • Pkg モードは using Pkg; Pkg.add("...") と等価。スクリプト中では関数版を、対話操作では Pkg モードを使うのが定石

Pkg REPL モードとは

Julia の対話シェル(REPL)には、通常モード以外に「特殊モード」が用意されており、その 1 つがパッケージ管理モード(Pkg モード)です。REPL 上から addrmupdate といった短いコマンドでパッケージ操作が行えるため、対話的にライブラリを試すときに便利です。

内部的には using Pkg; Pkg.add("PackageName") と同じ処理が走ります。スクリプトやコード中では関数版を、REPL でその場で操作するときは Pkg モードを使う、と覚えておけば十分です。

起動方法

Julia を起動して、通常のプロンプトが表示されている状態で ](角カッコの閉じ)を 1 回押します。

julia>

上記のように Julia のプロンプトが出ている状態で ] を押すと、プロンプトが切り替わります。

(@v1.10) pkg>

カッコの中(例: @v1.10)は現在アクティブな環境(Project)の名前です。新しい Julia をインストール直後はバージョン名そのもの(既定環境)になっています。自作プロジェクトのフォルダで起動した場合や、activate で個別環境を有効にした場合はその名前が表示されます。

他の特殊モードとの関係

Pkg モード以外にも REPL には次の特殊モードがあります。どれも 1 文字キーで切り替わります。

キーモードプロンプト用途
(既定)Julia モードjulia>通常のコード実行
]Pkg モード(env) pkg>パッケージ管理
?ヘルプモードhelp?>関数・型のドキュメント表示
;シェルモードshell>OS のコマンドをそのまま実行

Pkg モードでよく使うコマンド

Pkg モードに入った後、コマンド名と引数だけで操作できます。; は不要、関数呼び出しの括弧も不要です。

# パッケージ追加
(@v1.10) pkg> add Plots

# 複数まとめて
(@v1.10) pkg> add DataFrames CSV

# バージョン指定で追加
(@v1.10) pkg> add Plots@1.39

# 現在の環境に入っているパッケージ一覧
(@v1.10) pkg> status

# 短縮形
(@v1.10) pkg> st

# 更新
(@v1.10) pkg> update

# 削除
(@v1.10) pkg> rm Plots

# 現在のフォルダを新規プロジェクト環境としてアクティベート
(@v1.10) pkg> activate .

# デフォルト環境に戻す
(MyProject) pkg> activate

抜け方

Pkg モードから通常の Julia モードに戻るには 2 通りあります。

  • Backspace をプロンプトが空の状態で押す → 通常モードに戻る(もっとも一般的)
  • Ctrl-C を押す → 強制的に通常モードに戻る

逆に ; シェルモードや ? ヘルプモードに切り替えたい場合は、いったん通常モードに戻ってからキーを押し直します。

関数版との対応

スクリプト内や Jupyter ノートブックでパッケージ管理したい場合は、関数版を使います。Pkg モードのコマンドとの対応は単純です。

Pkg モード関数版(事前に using Pkg
add PlotsPkg.add("Plots")
rm PlotsPkg.rm("Plots")
statusPkg.status()
updatePkg.update()
activate .Pkg.activate(".")
instantiatePkg.instantiate()

環境(Project)との関係

Pkg モードの強みは「プロジェクト単位で依存パッケージを完全に分離できる」点にあります。Julia の環境は Project.toml(依存リスト)と Manifest.toml(完全な依存解決結果)の 2 ファイルで管理されます。これは Python の venv + requirements.txt や Node の package.json + package-lock.json に近い関係です。

# プロジェクトディレクトリを作って、その中でアクティベート
mkdir MyApp && cd MyApp
julia
julia> ]
(@v1.10) pkg> activate .
  Activating new project at `~/MyApp`

(MyApp) pkg> add DataFrames CSV
   Resolving package versions...
    Updating `~/MyApp/Project.toml`
    Updating `~/MyApp/Manifest.toml`

# 別マシンに移すときは Project.toml + Manifest.toml を渡し、
# 受け手は次のコマンドで完全再現できる
(MyApp) pkg> instantiate

新規パッケージ追加時に何が起きているか

add は単に「DL してくる」のではなく、レジストリ(General)からメタ情報を取得し、互換性のあるバージョンの組合せを SAT ソルバ的に解いて Manifest.toml に確定させます。これにより、同じ Manifest からは何度でも完全同一の環境を再構築できます。

トラブル時のチートシート

症状対処
] を押しても切り替わらないカーソル位置が REPL の入力先頭になっていることを確認。何か入力された後だと文字として扱われる
ERROR: The following package names could not be resolvedパッケージ名のタイポか、レジストリ未更新。registry update 後に再実行
依存解決が無限に終わらない互換制約の競合。rm で問題のパッケージを外してから入れ直す。または --update を付ける
環境を共有された側で動かないinstantiate を実行して Manifest を再現。それでもダメなら Julia 本体のバージョン違い

関連

  • Julia — 言語本体の解説
編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. Julia単体のインストール
  2. JuliaProを用いたインストール
  3. フレームワーク
  4. Pkg REPL modeの起動

最近更新/作成されたページ