我目前正在以一种确切的方式设置git和virtualenv 适合我的需要,到目前为止,没有造成任何问题。但是我知道 我的设置是非标准的,我想知道是否有人更熟悉virtualenv的 内部人员可以指出它是否以及可能出错的地方。
我的virtualenv在我的git存储库中,但是git被设置为忽略bin
和include
目录以及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但具有以下优势:
如果有人更新或安装了一个软件包并推送了他们的更改,那么其他任何提取这些更改的人都会自动获得更新:他们不需要注意requirements.txt
文件已更改或执行任何操作{ {1}}勾搭魔法。
没有网络依赖:所有使应用程序工作的代码都存在于git存储库中。
我知道这只适用于纯Python软件包,但这就是我现在关注的所有内容。
有谁知道我应该注意这种方法的任何其他问题?
答案 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中检查了任何绝对路径,我认为这是这种方法的一个主要问题。