pyenv と virtualenv の違い

似ているようで違うので自分メモ

CentOS 6 のレガシーな環境は Python 2.6です。

pyenv

一つのシステムに複数のバージョンのPythonを入れるためのもの

  • linux(というかCentOSとかRHとか各ディストリ)は割とPythonに依存している
  • よって、/usr/bin/python を差し替えるようなインストールは難しい
  • しかもPython 2/3の問題もある
  • 使いたいpackage によって必要なPythonのバージョンも異なる

というものに対応するためのもの。一つのシステムに複数のバージョンのpython環境を入れるためのもの。

  • pyenv global 2.7.15
    システム全体で2.7.15を使わせる。linuxではほぼ使わないと思われ

  • pyenv local 2.7.15
    今いるフォルダ(cwd)で、未来永劫 2.7.15 を使う。ここでpip installすると、システム全体の 2.7.15のsite-packageに入る。そのフォルダから上に行くと元から入っている2.6を使う

  • pyenv shell 2.7.15
    現在実行しているシェルで2.7.15を使うexit(ctrl-D)してloginしなおすと、2.6に戻る。

この3つで自分的にはOK

 

virtualenv

 

pyenvでインストールした環境から自分専用の環境をforkするもの

ぶっちゃけ自分専用のvm使い捨て環境ならいらないか、と思っていたが、wheelを使えるので一人でも意味がある。

  • pyenv virtualenv 2.7.15 2715forTensor
    今いるフォルダにpyenvで作成した、2.7.15 の環境から特別な環境を作る。このあとにpipでインストールしたパッケージはシステム全体には波及されない
  • pip install wheel
    wheel(コンパイル済み環境を保存する仕組み)をインストールする。
  • pyenv exec pip wheel --wheel-dir=~/wheelhouse -r 2715forTensor.txt
    今のvirtualenv環境を保存する。wheel-dirと.txtを保存しておけば下記で使える

別のサーバでpyenv/virutalenvを入れたあと

  • pyenv virtualenv 2.7.15 275forTensor
    pip install -r 2715forTensor.txt --use-wheel --no-index --find-links=~/wheelhouse
    別のサーバとかでも上の環境が復元できるはず。インストール漏れとか間違いがかなり減るはず。

これくらいで自分はに充分かな。