只是好奇人们如何将他们的Django项目与virtualenv结合使用
更具体地说,您如何使您的生产virtualenv与您的开发机器正确同步?
我使用git for scm但是我没有我的virtualenv在git repo中 - 我应该,还是最好使用pip冻结然后使用冻结输出在服务器上重新创建环境?(如果你这样做,请你描述一下步骤 - 我发现关于解冻过程的文档很少 - 有pip install -r freeze_output.txt
可能吗?)
我只是使用pip,Fabric和git在工作中设置了这样的东西.流程基本上是这样的,并且从这个脚本中大量借用:
在我们的源代码树中,我们维护一个requirements.txt文件.我们将手动维护.
当我们执行新版本时,Fabric脚本会根据我们传递的任何树形结构创建存档.
Fabric将为我们正在部署的内容找到SHA git log -1 --format=format:%h TREEISH
.这给了我们SHA_OF_THE_RELEASE
Fabric将获取我们的需求文件的最后一个SHA git log -1 --format=format:%h SHA_OF_THE_RELEASE requirements.txt
.这会抛出哈希的短版本,就像1d02afc
这个特定版本的文件的SHA 一样.
然后,Fabric脚本将查看我们的virtualenvs存储在远程主机上的目录.
如果没有名为的目录1d02afc
,则会创建一个新的virtualenv并进行设置pip install -E /path/to/venv/1d02afc -r /path/to/requirements.txt
如果是现有的path/to/venv/1d02afc
,什么都不做
这个小小的神奇之处在于传递你想要git的任何树,并让它进行包装(来自Fabric).通过使用git archive my-branch
,git archive 1d02afc
或任何其他,我保证让安装在我的远程机器右侧的包.
我走了这条路线,因为如果包裹在发布之间没有变化,我真的不希望有额外的虚拟主义者浮动.我也不喜欢在我自己的源代码树中拥有我依赖的实际包的想法.