cloverrose's blog

Python, Machine learning, Emacs, CI/CD, Webアプリなど

virtualenvを使ってみる

下準備

環境

Ubuntu12.04(すでにPython2.7が入ってる)

まずはvirtualenvだけでやってみる

virtualenvwrapperがあるけど、まず何をやっているのか知りたいのでwrapperなしで。

virtualenvのインストール

sudo pip install virtualenv

virtualenv環境を作成->アクティベート

virtualenv --no-site-packages env1
source env1/bin/activate

パッケージをインストール

(env1)$ pip install django

virtualenv環境をディアクティベート

(env1)$ deactivate

別のvirtualenv環境に移動

(env1)$ deactivate
source env2/bin/activate

参考サイト

Virtualenv - 清水川Web

Windowsの人は今日のPython: VIRTUALENV についても参考になるかと。僕はUbuntuなので逆にscriptsフォルダ無いよってなりましたが。

次はvirtualenvwrapper

virtualenvwrapperをインストール

sudo pip install virtualenvwrapper

virtualenvwrapperの設定

~/.bashrcに以下を追加してコンソールを再起動

export WORKON_HOME=$HOME/.virtualenvs
source `which virtualenvwrapper.sh`

virtualenv環境を作成->アクティベート

mkvirtualenv env2

virtualenv環境をディアクティベート

(env1)$ deactivate

別のvirtualenv環境に移動

(env1)$ workon env2

違うバージョンのPythonを使ってみる

Python3をインストール

sudo apt-get install python3

virtualenv環境を作成

virtualenv -p python3 --no-site-packages env3k

Python2.6のインストール

sudo add-apt-repository ppa:fkrull/deadsnakes
sudo apt-get update
sudo apt-get install python2.6 python2.6-dev

参考サイトHow can I install Python 2.6 on 12.04? - Ask Ubuntu

virtualenv環境を作成

virtualenv -p python2.6 --no-site-packages env26

勘違いしてたやりかた

pオプションではなくvirtualenvを呼び出すときにつかうPythonのバージョンを変えればいいと勘違いしていた。その時のやり方とエラーをメモ。

virtualenv環境を作成

python3 /usr/local/bin/virtualenv --no-site-packages env3k

このやり方で出力されるエラー

Traceback (most recent call last):
  File "/usr/local/bin/virtualenv", line 5, in <module>
    from pkg_resources import load_entry_point
ImportError: No module named pkg_resources

注意

virtualenv環境上に何かインストールするときは

easy_install django
pip install djang

というようにsudoを付けずに行う。

virtualenvを使ってPython2.5とDjango0.96が動く環境を作ってみる - SELECT * FROM life;

この時sudoで実行しないように気をつけましょう。sudoを使うとPATHが異なるため、仮想環境外のpipを実行してしまう可能性があります。

議論「easy_install vs. pip」

Pythonを取り巻く開発環境(PyCon JP 2012資料 #pyconjp) - YAMAGUCHI::weblog
virtualenv, virtualenvwrapper, pip を使う方法 - Ian Lewis
を参考にどちらを使うのがベターか考えた。

まずvirtualenvではデフォルトではpipが標準のパッケージ管理ツールとして選択されている。
またianlewisさんのページには

しかし、よく使われてるeasy_install は virtualenv と連携できなくて、どうしても、システムのpythonディレクトリにパッケージをインストールしてしまう。

と書いてあるのでpip優勢?

一方pipには

またpipはeggを扱えないなどの制限があるため、例えばIPythonのようなモジュールはインストールできないことに注意しましょう。

という欠点も。

  • > pip install ipythonできたけ。よくわからん。

また Pythonを取り巻く開発環境(PyCon JP 2012資料 #pyconjp) - YAMAGUCHI::weblogの動画の中(どこで言ってたか思い出せない)でpipだとtarballのインストールがうまくいかないということでeasy_install推奨してる。

情報の鮮度からして、ianlewisさんのeasy_installがうまくいかない問題は、setuptoolsではなくdistributeを使えばうまくいくのではという感じ?

結論

標準がpipだしpip使っとけばいいか。
ipythonなどeggをインストールしたい時はeasy_install使えばいいか。
混ざっちゃってるけどpipがうまいことやってくれると信じる。

やりたいこと

IPythonはよく使うのでそこらへんも
ipython と virtualenv を同時に使う方法 - Ian Lewis

  • > ipython最新のリリースノート見るとvirtualenvのサポートしたみたい

Add simple support for running inside a virtualenv. While this doesn’t supplant proper installation (as users should do), it helps ad-hoc calling of IPython from inside a virtualenv. PR #1388.