使用git来管理virtualenv状态:这会导致问题吗?

时间:2011-05-10 19:54:39

标签: python git virtualenv

我目前正在以一种确切的方式设置git和virtualenv 适合我的需要,到目前为止,没有造成任何问题。但是我知道 我的设置是非标准的,我想知道是否有人更熟悉virtualenv的 内部人员可以指出它是否以及可能出错的地方。

我的设置

我的virtualenv在我的git存储库中,但是git被设置为忽略bininclude目录以及lib 中的所有内容,除了 site-packages 1}}目录。

更准确地说,我的.gitignore文件如下所示:

*.pyc

# Ignore all the virtualenv stuff except the actual packages
# themselves
/bin
/include
/lib/python*/*
!/lib/python*/site-packages

# Ignore easyinstall and setuptools
/lib/python*/site-packages/easy-install.pth
/lib/python*/site-packages/setuptools.pth
/lib/python*/site-packages/setuptools-*
/lib/python*/site-packages/pip-*

通过这种安排,我 - 以及其他任何正在检查项目的人 - 都可以正常使用virtualenv和pip但具有以下优势:

  1. 如果有人更新或安装了一个软件包并推送了他们的更改,那么其他任何提取这些更改的人都会自动获得更新:他们不需要注意requirements.txt文件已更改或执行任何操作{ {1}}勾搭魔法。

  2. 没有网络依赖:所有使应用程序工作的代码都存在于git存储库中。

  3. 我知道这只适用于纯Python软件包,但这就是我现在关注的所有内容。

    有谁知道我应该注意这种方法的任何其他问题?

3 个答案:

答案 0 :(得分:9)

这是一个有趣的问题。我认为其他两个答案(到目前为止)提出了很好的具体要点。显然你已经考虑过这个并且已经达到了你喜欢的解决方案,但我会注意到virtualenv用户之间似乎存在一种哲学上的分歧。

我认为你属于的一个阵营认为当地的VE是项目的一部分(即它应该受版本控制)。另一方认为VE应该基本上被视为开发工件 - requirements.txt应该是项目存储库的一部分,但是您应该能够根据需要吹走并重新创建VE。

我只是提到这一点,因为当我第一次看到这种区别时,它有助于塑造我对virtualenv的思考。 (我在第二个阵营,FWIW,因为它对我来说似乎更简单,更清洁,但这并不是说第一阵营对你的特定项目来说是错误的。)

答案 1 :(得分:6)

如果-e中有任何requirements.txt个项目,换句话说,如果您有format中描述的使用git版本控制的任何可编辑依赖项在提交src目录时,您很可能会遇到问题。如果您只是将/src添加到.gitignore,那么您可以避免此问题,但通常安装只会在site-packages向此位置添加指针,因此您需要它!

答案 2 :(得分:2)

在我的virtualenv的/lib/python2.7/site-packages中,我有绝对路径,例如Django.egg-link我有/Users/henry/.virtualenv/mowapp/src/django(这是Mac)。

检查你是否在git中检查了任何绝对路径,我认为这是这种方法的一个主要问题。