pyenvオワコン、direnv最強
社内勉強会で発表しようと思ったけど、寿司の運搬という重大任務を仰せつかって、流れてしまったスライドを転載
(なお原稿では乱立する"***env"をマスコミは「目があって角が2本」としか認識していない国民的ロボットシリーズに、 anyenvをそれらを合体させたプラモ作例、 direnvを白くて角が1本のシンプルなデザインな新作に例えましたが、 大人の事情で削除しています。)
pyenvはawesome
Pythonには、プロジェクトそれぞれに専用の環境を作ってPythonのバージョンやライブラリを切り替えることができる、virtualenv, virtualenvwrappperというツールがあります。 Rubyなどの他の言語にも、virtualenvのようなツールがあります。
しかし、プロジェクトごとの環境を切り替えるたびに、いちいち切り替えコマンド(workon)を叩くのは面倒です。
pyenvはあらかじめディレクトリに環境を紐付けておくと、ディレクトリにcdしたとき、勝手に環境を切り替えてくれます。
$ # ~/foo ディレクトリでは、python 3.4.1を使う
$ cd ~/foo
$ pyenv local 3.4.1
$ # 移動すると、自動でpythonが切り替わる
$ cd ~/foo
$ python --version
Python 3.4.1
これで「小1時間悩んだ挙句、別のPythonで実行していた事に気づき(ry」ということは無くなります。
はっきり言って、革命的です、life-changingです。
(pyenvには指定したバージョンのPythonインストールする機能もありますが、割愛します)
乱立する ***env
しかし、pyenvはPython専用です。
プログラミング言語ごとにrbenv phpenv ndenv jenv denv luaenvなどがありますが(ちなみにrbenvが***envの元祖らしいです)、どれもやることはほとんど同じです。
同じなのに、別々のツールになっているとはこれ如何に?
そして、新しい言語が登場したらまた***envを作らなければならないのでしょうか?
anyenvは解決策か?
***envを一元的に管理するための、anyenvというツールもあります。
しかし、ただ寄せ集めただけという感じがします。
また、各***envの間でコードが重複している問題や、新しい言語が登場したらまた***envを作らなければならない問題は解決しません。
direnvこそが真の解決策
そこでdirenvです
direnvはディレクトリごとに環境変数を設定するツールです。
Python含む多くの言語は、環境変数を切り替えれば、プロジェクト環境も切り替えられるのです。 言語処理系以外のツールの切り替えにも、汎用的に使えるでしょう。
また、言語ごとに use_python(Pythonのバージョンを宣言)、layout python(virtualenv環境を作ることを宣言)といったショートカットコマンドもあるので、***envより手間が増えるということもありません。
つまり、direnvは*envの上位互換な後継ツール**なのです。
これからはdirenvを使いましょう!