virtualenvでpython環境を管理する


はじめに

pythonにはvirtualenvという仮想環境が簡単に作れるモジュールがある。お試しに何かモジュールをインストールしたい場合、virutalenvで環境を作ってそちらにインストールして試せば、システム環境は無傷で使える。いくつも環境が作れるのでpythonのバージョンで分けたりと色々と便利なのだ。
気に入らなければその環境を消すか使わなければいいだけ。

virtualenvとそれを簡単に管理できるvirtualenvwrapperをセットで導入するのが便利なのでそちらをメモ。

  • ubuntu14.04
  • Mac OSX Yosemite(10.10.3)

install and setup

ubuntu

# pipがなければインストール
$ sudo apt-get install python-pip
# pythonを使うなら依存関係でエラーが出るかもしれないのでこちらもインストール
$ sudo apt-get install python2.7-dev

# virtualenv / virtualenvwrapperのインストール
$ sudo pip install virtualenv
$ sudo pip install virtualenvwrapper

mac

Macはpipは最初から使えるはず。

# virtualenv / virtualenvwrapperのインストール
$ sudo pip install virtualenv
$ sudo pip install virtualenvwrapper

setup

virtualenvwrapperを使うには以下のスクリプトをbashrcに追加する必要がある。

$ vim ~/.basrhc  # macは`~/.bash_profile`
    source /usr/local/bin/virtualenvwrapper.sh
    export WORKON_HOME=~/.virtualenvs

使ってみる

作成

オプションは色々とあるが、システムのまっさらな状態で使ってみたいので、基本的に自分は--nosite-packageのみつける。

# mkvirtualenv <option> <環境名>
$ mkvirtualenv --no-site-package hoge
    # --never-download        : ネットワークからDLをしない
    # --system-site-packages  : インストール済みモジュールを使用する
    # --no-site-packages      :  インストール済みモジュールを全て外した状態で仮想環境が作成される

# 作成されるとコマンドプロンプトに一番左に環境名が追加される
(hoge)$

作成した環境ディレクトリを確認

  • 環境ディレクトリに移動
(hoge)$ cdvirtualenv
# ディレクトリを調べてみる
(hoge)$ pwd
    /home/hoge/.virtualenvs/hoge
# 中身はこんな感じ
(hoge)$ ls
    bin  include  lib  local

モジュールをインストールしてみる

  • gitでバックアップをとって他のモジュールをインストールしてみる
# 環境全体をローカルgitにコミットしておく
(hoge)$ git init; git add -A; git commit -a -m "init"
# 何かと便利な`Twisted`モジュールをインストールしてみる
(hoge)$ pip install twisted
  • gitで差分を見てみると、いろいろ新しく追加されている。
(hoge)$ git status
     On branch master
    # Untracked files:
    #   (use "git add <file>..." to include in what will be committed)
    #
    #   bin/cftp
    #   bin/ckeygen
    #   bin/conch
    #   bin/lore
    #   bin/mailmail
    #   bin/manhole
    #   bin/pyhtmlizer
    #   bin/tap2deb
    #   bin/tap2rpm
    #   bin/tapconvert
    #   bin/tkconch
    #   bin/trial
    #   bin/twistd
    #   lib/python2.7/site-packages/Twisted-15.1.0-py2.7.egg-info/
    #   lib/python2.7/site-packages/twisted/
    #   lib/python2.7/site-packages/zope.interface-4.1.2-py2.7-nspkg.pth
    #   lib/python2.7/site-packages/zope.interface-4.1.2-py2.7.egg-info/
    #   lib/python2.7/site-packages/zope/
    #   pip-selfcheck.json
    #
  • 早速インストールしたモジュールを使ってみる
# importできる
(hoge)$ python -c "import twisted"
  • 環境を離れて使ってみる
# 環境の停止
(hoge)$ deactivate
# 元のシステムで使ってみるとエラーが出る
$ python -c "import twisted"
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
    ImportError: No module named twisted

これにより、システム環境にはインストールされていないことがわかる。

よく使うコマンド一覧

deactivate : 環境の停止

# 環境の停止
(hoge)$ deactivate
$

workon : 環境に移行する

すでに環境があるならばworkonコマンドでその環境に移行することができる

$ workon hoge
(hoge) $

lssitepackages : インストールしたパッケージ一覧

(hoge)$ lssitepackages
    Twisted-15.1.0-py2.7.egg-info  pip-6.1.1.dist-info        zope
    _markerlib                     pkg_resources              zope.interface-4.1.2-py2.7-nspkg.pth
    easy_install.py                setuptools                 zope.interface-4.1.2-py2.7.egg-info
    easy_install.pyc               setuptools-15.0.dist-info
    pip                            twisted

rmvirtualenv : 環境を消す

フォルダをまるごと消しても事は済むのだが、もちろん環境を削除するコマンドもある。

$ rmvirtualenv hoge

おしまい

これ使っていていいのは、色々と試しても環境ごと削除すれば綺麗さっぱりできる。ドジな自分にはもってこいな環境なのである (;^_^