Virtualenv和源代码版本控制
我最近开始了一个Django项目,我很快意识到virtualenv会有很多原因。 我build立了virtualenv和我的项目,但现在我想知道我应该添加到我的源代码控制(在我的情况下,Mercurial)的文件。 我应该添加venv文件夹下的所有文件吗? 我如何确保一个同事可以克隆并立即开始工作,而不必再次设置env?
你生成一个你需要用你的项目提交的“需求”文件(通常是requirements.txt
):
pip freeze > requirements.txt
然后,每个开发人员将build立自己的virtualenv并运行:
pip install -r requirements.txt
当你在做python / django开发的时候,所有这些环境的麻烦都是常见的! 我经历了所有这些问题,我已经testing了一些解决scheme! 我testing过的东西:
- 项目运行本地
- 项目运行在virtualenv
- 在VM中运行的项目
- 在虚拟机上运行的项目,使用stream浪汉
我发现最好的解决scheme是#4! 因为我曾经工作的公司,团队中的每个人都有不同的操作系统,各种windows,mac和linux,并且要为每个环境安装所有依赖关系,所以需要花费时间! 所以我们决定尝试virtualenv,这真的很好! 但每个人还是要设置自己的环境。 virtualenv中的问题是所有的python源都在你创build的环境中! 所以我不会推送这些文件到源代码版本控制! 最好的解决scheme是#4,因为那正是我需要的,Vagrant使用厨师来设置你的环境,所以你只需要写一些食谱,让stream浪者为你操作! 然后将这些食谱推送给SCM,然后当下一个人从SCM获取文件并重新加载VM时,所有依赖关系将自动安装!
我有一个博客文章解释更多关于这个问题,以及我已经在github中创build了一个Django的空白项目,所以你可以得到一个你的项目使用vagrant开始点。
http://arthurnn.com/blog/2011/11/25/easy-django-quickstart/ (链接不再有效,所以链接到Wayback Machine)
编辑
来自Chris Pratt的解决scheme也是一个很好的解决scheme,但是一些库并不是很容易安装在所有的操作系统上,例如Mac上的很多人在安装MySQLdb-python的时候遇到了问题。 这是一个非常普通的图书馆,但是如果你的团队中的每个人都必须花时间来解决这个问题,那就不好了!