virtualenvwrapper でプロジェクト管理とか

ちょうど 1 年前にリリースされてた機能だけど、恥ずかしながら知らなかった。@t2y 先生が紹介していらっしゃって、後で試してみようと思ってたのですが...。virtualenvwrapper ってインストール時にグローバルな site-packages に放り込んで、後は。。。って感じ。あんま見直したことなかったのですが、プロジェクト管理以外にも結構色んな機能が追加されてるんですね。mkvirtualenv, workon だけじゃない!

ドキュメントを和訳してくださっている @t2y さんに多謝。基本的な機能やコマンド (と思いこんでいた mkvirtualenv, workon, etc...) についてはvirtualenv, virtualenvwrapper, pip を使う方法 by @IanMLewis さん, Pythonを取り巻く開発環境 (PyCon JP 2012資料 #pyconjp) by @ymotongpoo さんの記事が参考になります。

>>> mkvirtualenv

v3.3 から新しいオプションが増えてたんですね。これも知りませんでした。

  • -a <path/to/project>: プロジェクトに新しい env を関連付ける (後述)
  • -i <library_to_install>: env 作成と同時に、インストールしたいライブラリを指定する
    mkvirtualenv -i django -i django-celery-with-redis <env_name> のように複数指定できる
  • -r <path to requirements file>: env を作り requirements.txt 等指定したファイルに記載したライブラリを一括でインストールできる。個人的にこれは一番うれしいかも
    mkvirtualenv -r ./requirements.txt <env_name> ラクダーーー

>>> mktmpenv

これも v3.3 から。ユニークな名前で env 作成してくれる。

>>> cdvirtualenv, cdsitepackages

これは前からある。結構使う。私は activate, deactivate はよく書き換えるので、後述の cdproject と一緒に使うと幸せになれる。

>>> lsvirtualenv, lssitepackages

これも前からある。あんま使ったことない。workon, pip freeze -l でなれちゃってる。でも出力結果が細かかったり、lssitepackages は入力速くなりそう。

>>> add2virtualenv

これも前から。でも使ってる人あんま見たことない。add2virtualenv <path/to/external_libs> で、指定したディレクトリをカレント env に追加する。Django とか PySide 等でかいプロジェクトをいちいちチェックアウトしたくない場合を想定してあるらしい。これはシンボリックリンク、PIP_DOWNLOAD_CACHE, pip2pi とか色々解決方法があるけど、プロジェクトごとにライブラリのバージョン違ったりするので、今のとこ env 毎に全部インストールしちゃってる。

>>> toggleglobalsitepackages

v3.3 から。これ知らなかったのは辛い...。グローバル site-packages に入れてるのは、bpython, tox, py.test, mock, virtualenvwrapper などなど。setup.py で test_requires に書いてあるやつとか, requirements.txt にも書いてないライブラリーは基本グローバルに放り込んでる。グローバルが汚れるのはもちろん嫌だけど、env もなるべく汚したくない。使いたい時だけグローバル site-packages をパスに追加する。動作は virtualenv でやってたのと同様に "no-global-site-packages.txt" を作成したり、削除したりしてるだけです。ありがたい。

>>> mkproject

本題。v3.3 から。もともとプラグインで提供されてたらしい。1 プロジェクト 1 env
mkproject [-t <project_template>] [mkvirtualenv options] <env_name>

環境変数で指定された PROJECT_HOME にプロジェクトディレクトリを追加、かつ WORKON_HOME に対応する env を作ってくれる。env 名はプロジェクトディレクトリ名になります。

プロジェクト作成時用の素敵なテンプレート機能も用意されています。テンプレートは github, bitbucket, django, flask 等色々。例えば mkproject -t github <env_name> ってやると github 上に env 名のプロジェクトを作ってくれます。mkproject -t django <env_name> ってやると、django-admin create project <env_name> を実行して、スケルトン作ってくれます。

>>> setvirtualenvproject

setvirtualenvproject <virtualenv_path> <project_path> で既存の env とプロジェクトディレクトリをひもづけてくれる。

>>> cdproject

アクティブな env に関連付けられたプロジェクトディレクトリに飛んでくれる。コンソール開いて workon <env_name>; cdproject ってやると env 適用して、対応するプロジェクトディレクトリをカレントディレクトリにしてくれるという。素敵ですね!

たまにはグローバルな site-packages に入れっぱなしのライブラリーも見直してみるもんですね。

コメント

このブログの人気の投稿

Python から Win32 API 経由で印刷する

Disqus のスケール - Django 編

#PySpa アドベント (23 日目)