Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django和VirtualEnv开发/部署最佳实践_Python_Django_Git_Virtualenv - Fatal编程技术网

Python Django和VirtualEnv开发/部署最佳实践

Python Django和VirtualEnv开发/部署最佳实践,python,django,git,virtualenv,Python,Django,Git,Virtualenv,只是好奇人们是如何结合virtualenv部署他们的Django项目的 更具体地说,您如何使生产virtualenv与开发机器正确同步 我使用git for scm,但git repo中没有我的virtualenv—我应该使用pip冻结,然后使用冻结输出在服务器上重新创建环境吗?(如果您这样做,您能描述一下这些步骤吗?我发现关于解冻过程的好文档很少-类似于pip安装-r freeze_output.txt可能吗?我使用这个bootstrap.py: 需要的是一个名为“requirements

只是好奇人们是如何结合virtualenv部署他们的Django项目的

  • 更具体地说,您如何使生产virtualenv与开发机器正确同步
我使用git for scm,但git repo中没有我的virtualenv—我应该使用pip冻结,然后使用冻结输出在服务器上重新创建环境吗?(如果您这样做,您能描述一下这些步骤吗?我发现关于解冻过程的好文档很少-类似于
pip安装-r freeze_output.txt
可能吗?

我使用这个bootstrap.py:

需要的是一个名为“requirements”的目录,看起来像这样:

这里有一个apps.txt、一个libs.txt(apps.txt包括其中——我只是想让django应用程序与其他python模块分开)和一个src目录,其中包含实际的tarball

当运行./bootstrap.py时,它会创建virtualenv(如果存在,则删除上一个),并将从requirements/apps.txt到它的所有内容都安装进去。否则,我不会在virtualenv中安装任何东西。如果我想包含一个新库,我将tarball放入requirements/src/,在其中一个文本文件中添加一行,然后重新运行./bootstrap.py


bootstrap.py和需求被检查到版本控制中(也是pip.py的副本,所以我甚至不必在任何地方安装它)。虚拟电视本身不是。每次推送到生产服务器上时,推送到生产服务器上的脚本都会运行./bootstrap.py。(bootstrap.py也做了一些努力,以确保它坚持使用Python2.5,因为这是我们在生产服务器(UbuntuHardy)和我的开发机器(UbuntuKarmic)上使用的,如果你不小心的话,默认为Python2.6)

我只是在工作中使用pip、Fabric和git设置了类似的东西。流程基本上是这样的,大量借鉴了:

  • 在源代码树中,我们维护一个requirements.txt文件。我们将手动维护此功能
  • 当我们发布一个新版本时,Fabric脚本会根据我们传递给它的任何树创建一个归档
  • Fabric将为我们使用git log-1部署的内容找到SHA——format=format:%h TREEISH。这给了我们发布版本的
    SHA\u
  • Fabric将使用git log-1--format=格式:%h发布需求.txt的SHA\u,为我们的需求文件获取最后一个SHA。这就产生了hash的短版本,比如
    1d02afc
    ,它是这个特定版本中该文件的SHA
  • 然后,Fabric脚本将查找我们的VirtualNV存储在远程主机上的目录。
  • 如果没有名为
    1d02afc
    的目录,将创建一个新的virtualenv,并使用
    pip install-E/path/to/venv/1d02afc-r/path/to/requirements.txt进行安装
  • 如果存在路径/to/venv/1d02afc,则不会执行任何操作
  • 这个小魔术的一部分是通过任何你想git的树,并让它做包装(从织物)。通过使用git archive my branch
    git archive 1d02afc
    或其他任何工具,我可以保证在远程机器上安装正确的软件包


    我走这条路线是因为我真的不想让额外的virtuenv在发行版之间没有改变的情况下到处浮动。我也不喜欢将我所依赖的实际软件包放在自己的源代码树中。

    此答案中的链接已断开。请你纠正一下好吗?