Virtualenv和源代码版本控制


84

我最近开始了一个Django项目,并很快意识到,由于多种原因,virtualenv真的很有用。我设置了virtualenv和我的项目,但是现在我想知道应该将哪个文件添加到源代码管理(在我的情况下是Mercurial)。我应该在venv文件夹下添加所有文件吗?如何确保同事可以克隆并立即开始工作而无需再次设置环境?


18
我不建议将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年

1
尊敬的Googler,也请访问:stackoverflow.com/a/6012590/82216
sampablokuper,

Answers:


106

您会生成一个requirements.txt与项目一起提交的“需求”文件(通常是):

pip freeze > requirements.txt

然后,每个开发人员将设置自己的virtualenv并运行:

pip install -r requirements.txt

6

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

  1. 项目在本地运行
  2. 在virtualenv中运行的项目
  3. 在VM中运行的项目
  4. 使用vagrant在VM中运行的项目

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

我有一篇博客文章,解释了有关该主题的更多信息以及我创建的内容 在github中了一个Django Blank项目,因此您可以使用vagrant获得该项目的起点。

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

编辑

克里斯·普拉特(Chris Pratt)的解决方案也是一个很好的解决方案,但是某些库并不是在所有操作系统上都安装起来那么简单,例如,许多Mac上的人在想要安装MySQLdb-python时会遇到问题。这是一个非常普通的库,但是如果团队中的每个人都必须花时间解决这个问题,那根本不好!


MySQLdb-python这是使用完整环境的一个很好的理由,但是也不能通过pip / requirements.txt完成吗?
kbuilds 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.