2012-03-06 102 views
59

我最近启动了一个Django项目,很快就意识到virtualenv会非常有用,原因很多。我设置了virtualenv和我的项目,但现在我想知道应该将哪个文件添加到我的源代码管理器中(在我的例子中是Mercurial)。我应该在Venv文件夹下添加所有文件吗?我如何确保一位同事能够克隆并立即开始工作,而不必再次设置env?Virtualenv和源代码版本控制

+16

我不会建议将virtualenv放在源代码控制之下 - 它不能在Python版本,操作系统或32/64位平台上移植。相反,只需使用'〜/ path/to/virtualenv/bin/pip freeze>〜/ path/to/repo/requirements.txt'。其他开发者需要设置他们自己的virtualenv,但它实际上是两个命令 - “virtualenv〜/ path/to/env”,〜/ path/to/env/bin/pip install -r〜/ path/to/requirements。 txt'。 – AdamKG 2012-03-06 15:17:03

+0

亲爱的Google员工,请参阅:http://stackoverflow.com/a/6012590/82216 – sampablokuper 2013-05-07 15:33:38

回答

72

您生成您与您的项目提交了“要求”文件(通常requirements.txt):

pip freeze > requirements.txt 

然后,每个开发人员建立了自己的virtualenv并运行:

pip install -r requirements.txt 
6

当您在进行python/django开发时,所有这些环境麻烦都是常见的!我经历了所有这些问题,并且我测试了一些解决方案!我已经测试过的东西:

  1. 项目运行的本地
  2. 项目的virtualenv
  3. 项目运行在虚拟机上运行的虚拟机
  4. 项目运行,使用流浪汉

的最佳解决方案我发现是#4!因为我曾经工作过的公司,团队中的每个人都有不同的操作系统,各种windows,mac和linux,并且要为每个环境安装所有依赖关系,这需要时间!所以我们决定尝试virtualenv,这真的很棒!但每个人仍然必须建立自己的环境。 virtualenv中的问题是所有的python源代码都在你创建的环境中!所以我不会将这些文件推送到源版本控制!最好的解决方案是#4,因为那正是我需要的,Vagrant使用厨师来设置你的环境,所以你只需要写一些食谱,让流浪者为你运行它们!然后你将这些食谱推送给SCM,然后当下一个人从SCM获取文件并重新加载VM时,所有依赖关系将自动安装!

我有一个博客文章解释更多关于这个问题以及我已经创建a Django Blank project in github,所以你可以得到这个项目的起点使用vagrant。

http://arthurnn.com/blog/2011/11/25/easy-django-quickstart/(链接不再有效,因此链接到Wayback机器)

编辑

从克里斯·普拉特解决方案是一个很好的为好,但有些库不能如此直白地安装在所有例如,OS上的很多人在想要安装MySQLdb-python时遇到问题。这是一个非常常见的图书馆,但是如果你的团队中的每个人都必须花时间解决这个问题,那就一点都不好!

+0

'MySQLdb-python'这是使用完整环境的一个非常好的理由,但是这也不能通过点/要求来完成。文本? – kbuilds 2014-08-27 20:18:02