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

D. *_*ans 19 python git virtualenv

我目前有一个完全符合我需要的方式设置git和virtualenv,到目前为止,没有造成任何问题.但是我知道我的设置是非标准的,我想知道是否有人更熟悉virtualenv的内部结构可以指出它是否以及可能出错的地方.

我的设置

我的virtualenv是我的git仓库内,但混帐设置忽略bininclude目录,一切都在lib ,除了site-packages目录中.

更确切地说,我的.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-*
Run Code Online (Sandbox Code Playgroud)

通过这种安排,我 - 以及其他任何从事项目结账工作的人 - 可以正常使用virtualenv和pip但具有以下优势:

  1. 如果有人更新或安装软件包并推送他们的更改,那么任何其他提取这些更改的人都会自动获得更新:他们不需要注意requirements.txt文件已更改或执行任何post-receive钩子魔法.

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

我知道这只适用于纯Python包,但这就是我现在所关注的全部内容.

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

Pau*_*sex 10

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

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

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

  • 是的,你对这种哲学分歧是完全正确的.虽然,显然,"全部检查"方法对于完全控制运行时环境的项目(大多数基于Web的项目的情况)非常有意义,而不是对于许多将要运行的项目不同的用户.就个人而言,我可以看到双方的争论 - 在这个阶段,我只是想弄清楚一种特定方法的实际后果. (3认同)

Hen*_*nry 6

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