食わず嫌いしてたpyenvを使ってみたら便利過ぎて腰を抜かした話

  • 63
    いいね
  • 0
    コメント

【追記】この記事は2014年に書かれたものであり、内容については現在では歴史的意義以外の価値はありません。今からPython始めるならPython3でvenv使わないと怖い人たちに殴られるのでそうしましょう。


食わず嫌い、ダメ。ゼッタイ。

http://qiita.com/who_you_me/items/1d37d964c1459b9625fa#1-2

過去にPythonの開発環境について記事を書いた時、「pyenv? 別にPythonのバージョン切り替えたいニーズないから(゚⊿゚)イラネ」とかほざいてましたがこれは大きな間違いでした。お詫びして訂正いたします。

pyenv is 何

pyenv lets you easily switch between multiple versions of Python.

https://github.com/yyuu/pyenv

Pythonのバージョンを簡単に切り替えられるツールです。要はrbenvと同じで、Pythonを複数バージョンインストールして、ディレクトリ毎に使用するバージョンを指定できます。

お前vitrualenvだけあればいいって言ってただろ

はい、確かにそう言いました。私のPythonとの付き合い方ではせいぜい2系を3系を使い分けたいぐらいであり、そのくらいならvirtualenvだと思ってました。
参考: http://qiita.com/who_you_me/items/543a901a827e93401db1

しかし、virtualenv (+ virtualenvwrapper)は確かに革命的に便利なツールですが、一つだけ大変困った問題があります。

いちいちworkonするの面倒くさい!!!

これです。しかも私の場合なぜか一発でworkonって入力できず、wokornwokronと打ってしまい何度か打ち直すハメになります。

エイリアス設定しとけって話もありますが、どうせディレクトリごとに使いたい仮想環境って同じなので、あるディレクトリに飛んだら自動的にworkonしてくれるようにしたい。

.bashrcで頑張ればいけるのかもしれませんがなかなか面倒そうです。

pyenv-virtualenv がすべて解決してくれる!!!

pyenvに超便利なプラグインがありました。

https://github.com/yyuu/pyenv-virtualenv

インストールすると、pyenvにpyenv virtualenvコマンドが追加されます。
これを使うと、pyenvで指定できるPythonのバージョンにvirtualenvで作った仮想環境が加わります。

$ pyenv virtualenv 3.4.2 django
$ pyenv versions
* system
  2.7.8
  3.4.2
  django

この仮想環境をpyenv localに設定すると何が起こるでしょう?
そうです、指定のディレクトリに移動するだけで、自動的にvirtualenvで作った仮想環境に入ることができるのです!!

$ mkdir mydjangoproject
$ cd mydjangoproject
$ pyenv local django
$ pip install django
$ pip freeze
Django==1.7.1

$ cd ..
$ pyenv local
system

$ pip freeze
argparse==1.2.1
six==1.8.0
stevedore==1.0.0
virtualenv==1.11.6
virtualenv-clone==0.2.5
virtualenvwrapper==4.3
# 別の環境!!

$ cd mydjangoproject
$ pip freeze
Django==1.7.1
# cdしただけでdjangoの環境に入った!!

当然ですが他にdjangoのプロジェクトを始めたい場合、(Pythonのバージョンが同じで良いなら)ディレクトリ作ってpyenv local djangoしてやるだけでOKです。

これでわざわざworkon叩く必要がありません。今まで食わず嫌いしてた自分が恥ずかしいです。