3

我正在和我的朋友一起做一个 Django 项目。该项目依赖于一些 python 模块。我在 virtualenv 中安装了 django 和那些额外的依赖项。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.py文件,您的伙伴必须执行该文件来引导 virtualenv 和所需的包:

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

virtualenv 是在项目的根目录下创建的,所以在提交之前一定要 svn:ignore 或 .gitignore 创建的目录。

唯一的缺点是 AFAIK 它没有与 virtualenvwrapper 集成。但无论如何,这样做的理由是在项目中拥有环境,而 virtualenvwrapper 的一个目的是在你的 homedir 中拥有环境。

于 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 回答