3

私は友達と一緒に Django プロジェクトに取り組んでいます。プロジェクトには、いくつかの python モジュールへの依存関係があります。私はdjangoとそれらの追加の依存関係をvirtualenv内にインストールしています。django プロジェクトのコードは、チェックアウト/クローンを作成してコードを提供できるすべての友人がアクセスできるリポジトリにあります。しかし、私の開発環境にあるセットアップを友人のコンピューターに複製する方法、つまり、すべての追加の依存関係をインストールして、環境を展開できるようにする方法はありますか?

zc.buildout について聞いたことがあります。あまり深入りせずに見ただけです。複雑に見えます。これを達成する他の方法はありますか?私の友人が使用する開発環境は、GNU/Linux から MS Windows までさまざまです。

4

2 に答える 2

3

virtualenv には、さらにいくつかのフックを使用して自身のコピーを作成するという優れた機能があります。あなたの場合、重要なフックは after_install で、virtualenv がインストールされた直後に実行されます。

次の内容のスクリプトを作成するだけです。

import os, virtualenv

extra_text = """
import os, subprocess
def after_install(options, home_dir):
    subprocess.call([
        os.path.join(home_dir, 'bin', 'pip'),
        'install',
        '-r', 
        'relative_path_from_env_home_to_requirements_file',
    ])

def adjust_options(options, args):
    if not args: args.append('.')
"""

output = virtualenv.create_bootstrap_script(extra_text)
open('bootstrap.py', 'w').write(output)

そしてそれを実行します。bootstrap.pyvirtualenv と必要なパッケージの両方をブートストラップするために仲間が実行する必要があるファイルを作成します。

./bootstrap.py --no-site-packages

virtualenv はプロジェクトのルートに作成されるため、コミットする前に作成されたディレクトリを svn:ignore または .gitignore してください。

これの唯一の欠点は、知る限りそれが virtualenvwrapper と統合されていないことです。とにかく、これの存在理由はプロジェクトに環境を用意することであり、virtualenvwrapper の理由はホームディレクトリに環境を用意することです。

于 2011-08-11T15:50:02.337 に答える
3

buildout.cfg:

[buildout]
parts = python

[python]
recipe = zc.recipe.egg
eggs =
    your
    egg
    dependencies
    here
interpreter = python

bootstrap.pyを取得します。それで:

$ python bootstrap.py
$ bin/buildout
$ bin/python ...
于 2011-08-12T09:38:39.403 に答える