【问题标题】:Virtualenv and source version controlVirtualenv 和源代码版本控制
【发布时间】:2012-03-24 02:06:12
【问题描述】:

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

【问题讨论】:

  • 我不建议将 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
  • 尊敬的谷歌用户,另请参阅:stackoverflow.com/a/6012590/82216

标签: python django mercurial virtualenv


【解决方案1】:

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

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

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

我有一篇博文解释了有关该主题的更多信息,并且我创建了a Django Blank project in github,因此您可以使用 vagrant 作为您项目的起点。

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

编辑

来自 Chris Pratt 的解决方案也是一个不错的解决方案,但是有些库在所有操作系统中都不是那么容易安装,例如,很多人在 Mac 上安装 MySQLdb-python 时会遇到问题。这是一个非常通用的库,但如果你团队中的每个人都必须花时间解决这个问题,那就不好了!

【讨论】:

  • MySQLdb-python 这确实是使用完整环境的一个很好的理由,但是这不能用 pip/requirements.txt 来完成吗?
【解决方案2】:

您生成一个“需求”文件(通常为requirements.txt),并提交给您的项目:

pip freeze > requirements.txt

然后,每个开发者都会设置自己的 virtualenv 并运行:

pip install -r requirements.txt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    相关资源
    最近更新 更多