复制/复制Django开发环境

复制/复制Django开发环境,django,development-environment,buildout,Django,Development Environment,Buildout,我正在和我的朋友一起做一个Django项目。该项目依赖于一些python模块。我在virtualenv中安装了django和其他依赖项。django项目的代码位于一个存储库中,所有可以签出/克隆并向其贡献代码的朋友都可以访问该存储库。但是,有没有一种方法可以在我朋友的计算机上复制我在开发环境中的设置,即安装所有其他依赖项并为部署环境做好准备 我听说过zc.buildout。只是看了一眼,没有看得太深。它看起来确实很复杂。有没有其他方法来实现这一点?我的朋友们使用的开发环境从GNU/Linux到M

我正在和我的朋友一起做一个Django项目。该项目依赖于一些python模块。我在virtualenv中安装了django和其他依赖项。django项目的代码位于一个存储库中,所有可以签出/克隆并向其贡献代码的朋友都可以访问该存储库。但是,有没有一种方法可以在我朋友的计算机上复制我在开发环境中的设置,即安装所有其他依赖项并为部署环境做好准备


我听说过zc.buildout。只是看了一眼,没有看得太深。它看起来确实很复杂。有没有其他方法来实现这一点?我的朋友们使用的开发环境从GNU/Linux到MS Windows各不相同。

virtualenv有一个简洁的特性,它通过几个钩子创建了一个自身的副本。在您的例子中,重要的钩子是在安装之后,这将在安装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或.git忽略创建的目录

唯一的缺点是AFAIK它没有与VirtualVWrapper集成。但无论如何,存在的理由是在项目中有环境,而VirtualEnvrapper的理由之一是在您的homedir中有环境。

buildout.cfg:

[buildout]
parts = python

[python]
recipe = zc.recipe.egg
eggs =
    your
    egg
    dependencies
    here
interpreter = python
得到。然后:


非常感谢。似乎是那种适合我需要的东西。将尝试此方法并给出反馈。:-)我尝试使用buildout实现自动化的事情如下所示。buidout应该安装django,从HgRepo克隆我的django项目,并从cheese shop安装其他依赖项。我该怎么做呢?我确实遇到了“djangorecipe”和“mercurialrecipe”,但我不知道如何将它们放在一起一般来说,您的签出本身就是构建,因此您需要将
buildout.cfg
bootstrap.py
放在项目根目录中。这样,当有人签出/克隆您的项目时,他们只需执行引导/构建dannce,就可以启动并运行了。如果您有多个签出,请查看
mr.developer
。难道连代码库的克隆都不可能实现自动化吗?
$ python bootstrap.py
$ bin/buildout
$ bin/python ...