Help us understand the problem. What is going on with this article?

Julia v1.0.0で入った仮想環境の管理について

More than 1 year has passed since last update.

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配列のほうが有利かもしれません。


  1. 仮想環境という言い方ですが、VirtualBoxやVMWareのような物とは別物です。最適な言葉があれば教えてほしいです。 

YuK_Ota
年収600万円〜のリクルートお待ちしております。
https://yukota.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away