Pythonでプロジェクトを作成するときまず最初にやるのがvirtualenvを実行することです。
Juliaにもv1.0.0から同様の仮想環境でのパッケージを管理する機能が導入されました。1
仮想環境でのパッケージ管理概要
PythonやRubyを使っていた人は分かっていると思うので読み飛ばしてOKです。
プログラムを作成する際、様々なライブラリに依存して開発すると思います。
完成したプログラムを別環境で動作させる際、こうした依存したライブラリも同時にインストールしなければなりません。
つまり、どのライブラリをインストールすべきかの管理をしなければなりません。
ところで、開発環境に予め入っていたライブラリを無意識に使っていた場合どうなるでしょうか?
また、複数の開発を並行で行っている場合で、使いたいライブラリのバージョンがそれぞれで異なる場合もあるでしょう。
こうした事を解決するのがvirtualenvであり、bundlerでした。
PythonやRubyではこれらにより開発環境ごとにライブラリを管理、インストールしていました。
REPL
Pythonではvirutalenvは単体のプログラムでしたが、Juliaではインタラクティブシェルの中から実行します。
インタラクティブシェルですが、今回は以下の3モードを使います。
- Juliaを実行するためのモード
- pkg管理のためのモード
- shellを実行するモード
Juliaを実行するためのモード
いつものやつです。Julian modeといいます。
好きなだけJuliaを実行してください。
pkg管理のためのモード
ここでpkgを管理します。Pkg REPL-modeといいます。
Julian modeで]
を押すとこのモードに入ります。
Pkg REPL-modeになるとプロンプトがjulia>から(v1.0)pkg>に変わります。
Ctrl+c
でJulian modeに戻ります。
Backspaceでも戻れます。
shellを実行するモード
shellが出てきます。Shell modeといいます。
echo $SHELL
を打ってもSHELL not defined
と言われるので、何かbashとかを呼び出しているわけでもないようです。cdとかlsとかそういうのは通ります。
Julian modeで;
を押すとこのモードに入ります。
Shell modeになるとプロンプトがjulia>からshell>に変わります。
Pkg REPL-modeと同じくCtrl+c
かBackspaceでJulian modeに戻ります。
Pkg REPL-modeと違い、コマンドを一つ打つごとにJulian modeに戻ります。
仮想環境作成
仮想環境を作成します。
virtualenvで言うvirtualenv [プロジェクト名]
です。
JuliaではPkg REPL-modeでgenerate [プロジェクト名]
です。
generateはパッケージを作りたいときのもので、スケルトン的なものも作ってくれます。
そこまでは必要ない場合はactivate [プロジェクト名]
で良いです。
activateの場合はパッケージをaddするまで何もファイルが作られません。
ただし、生成されるProject.tomlにnameの項目が無いなど、他のプロジェクトでaddするつもりがあるパッケージを作るときは色々かけているので、generateで作ったほうが無難です。
仮想環境に入る
virtualenvで言うbin/activate
です。
JuliaえはPkg REPL-modeでactivate [プロジェクトのディレクトリ]
です。
例えばカレントディレクトリがパッケージの中ならactivate .
になります。
仮想環境に入るとプロンプトが(v1.0)pkg>
から(パッケージ名)pkg>
になります。
仮想環境から出る
viatualenvでいうdeactivate
です。
多分、無いんじゃないですかね…。
マニュアルを読んだんですが見つけられませんでした…。
パッケージの追加
pipでいうpip install
です。
Pkg REPL-modeでadd [パッケージ名]
です。
パッケージ名のところはgitのurlでもローカルgitへのパスでもいけます。
gitで管理されていることは必須みたいです。
cloneしてきたリポジトリの仮想環境の再現
pipでいうpip install -r requirements.txt
です。
cloneしてきたリポジトリでactivateした後、Pkg REPL-modeでinstantiate
です。
依存関係の記録
pipでいうrequirements.txtです。
Project.tomlが勝手に依存関係を記述し続けてくれます。
ライブラリのインストール先
virutalenvではbinの下にライブラリがインストールされていました。
このため、プロジェクトごとに同じライブラリがインストールされることがあり、若干非効率を感じるところがありました。
Juliaでは~/.julia/packages/ライブラリ名の下にハッシュみたいな名前のフォルダがあり、その下にライブラリが展開されています。
各プロジェクトごとにライブラリをインストールするのではなく、このpackagesの下を共有しているようです。
どうでもいい話
Shell modeですがキーバインドが;
です。
私はUS配列なので特に不便ではなかったのですが、JIS配列だとちょっとめんどくさいかもしれません。
ショートカット系はUS配列使用者が決めている以上、US配列のほうが有利かもしれません。
-
仮想環境という言い方ですが、VirtualBoxやVMWareのような物とは別物です。最適な言葉があれば教えてほしいです。 ↩