pythonのパッケージ管理ツールは何を使えばよいですか?


rubyではgemfileでプロジェクトごとに必要なパッケージを管理できますが、  
pythonではどのようにすれば良いのでしょうか。

ちなみにdjangoを使った開発を想定しています。




gemfile相当というと、pipのrequirements.txt が使えるのではないかと思います。

[code]

    pip freeze > requirements.txt
    
[/code]

で現在の環境の状態が収集でき

[code]

    pip install -r requirements.txt
    
[/code]

で別の環境に同じパッケージをインストールすることができます。

# 使用例

例えば、virtualenvであるディレクトリにインストールしたものと同じバージョンを別のディレクトリに適用したい場合

# 元となる環境の作成

Windows , python 2.7 の場合です。  
Linuxなどでは `scripts\activate` コマンドを `. bin/activate` としてください。あとは同様にできると思います。

virtualenvでマシンの環境を汚さないように作っています。  
virtualenv未導入の場合は `pip install virtualenv` などとしてインストールしておいてください。

ログは大分省略しています。  
djangoは今日時点ではバージョン指定しなければ1.8がインストールされますが、あえて1.7を指定しています。

[code]

    D:\Work\so8754>virtualenv yyy
    New python executable in yyy\Scripts\python.exe
    Installing setuptools, pip...done.
    
    D:\Work\so8754>cd yyy
    D:\Work\so8754\yyy>Scripts\activate
    
    (yyy) D:\Work\so8754\yyy>pip install django==1.7
    Successfully installed django-1.7
    
    (yyy) D:\Work\so8754\yyy>pip install pillow
    Successfully installed pillow-2.8.1
    
    (yyy) D:\Work\so8754\yyy>pip freeze > requirements.txt
    (yyy) D:\Work\so8754\yyy>deactivate
    D:\Work\so8754\yyy>
    
[/code]

requirements.txt の中身は以下の様になっています。

[code]

    Django==1.7
    Pillow==2.8.1
    
[/code]

# 別の環境に適用

このファイルを使って別のディレクトリに同じパッケージをインストールします。

[code]

    D:\Work\so8754\yyy>cd ..
    D:\Work\so8754>virtualenv zzz
    D:\Work\so8754>cd zzz
    D:\Work\so8754\zzz>scripts\activate
    (zzz) D:\Work\so8754\zzz>copy ..\yyy\requirements.txt .
            1 個のファイルをコピーしました。
    
    (zzz) D:\Work\so8754\zzz>pip install -r requirements.txt
    Collecting Django==1.7 (from -r requirements.txt (line 1))
      Using cached Django-1.7-py2.py3-none-any.whl
    Collecting Pillow==2.8.1 (from -r requirements.txt (line 2))
      Using cached Pillow-2.8.1-cp27-none-win32.whl
    Installing collected packages: Pillow, Django
    
    
    Successfully installed Django-1.7 Pillow-2.8.1
    (zzz) D:\Work\so8754\zzz>
    
[/code]

djangoが1.7が入っているのがわかると思います。

# パッケージバージョンの変更

また、別バージョンに更新したい場合はまず zzz\requirements.txt を以下の様に書き換えます

[code]

    Django
    Pillow==2.8.1
    
[/code]

Djangoのバージョンを指定しなかったので、最新版を指定します( 用途に応じて `Django==1.8` などとしても問題ありません )。  
次のコマンドを実行します。

[code]

    (zzz) D:\Work\so8754\zzz>pip install --upgrade -r requirements.txt
    Requirement already up-to-date: Pillow==2.8.1 ...
    ...
          Successfully uninstalled Django-1.7
    Successfully installed Django-1.8
    
[/code]

Django 1.7 がアンインストールされて、1.8 がインストールされたことがわかると思います。

virtualenvwrapperを使う場合は、`mkvirtualenv 環境名 -r
requirements.txt`などとして作成と同時にインストールもできたと思います。

