【问题标题】:Django and VirtualEnv Development/Deployment Best PracticesDjango 和 VirtualEnv 开发/部署最佳实践
【发布时间】:2011-01-15 12:16:28
【问题描述】:

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

  • 更具体地说,您如何使您的生产 virtualenv 与您的开发机器正确同步?

我将 git 用于 scm,但在 git repo 中没有我的 virtualenv - 我应该,还是最好使用 pip freeze,然后使用 freeze 输出在服务器上重新创建环境? (如果您这样做,您能否描述一下这些步骤 - 我发现关于解冻过程的好文档非常少 - 像 pip install -r freeze_output.txt 这样的可能吗?)

【问题讨论】:

    标签: python django git virtualenv


    【解决方案1】:

    我使用这个 bootstrap.py:http://github.com/ccnmtl/ccnmtldjango/blob/master/ccnmtldjango/template/bootstrap.py

    期望是名为“requirements”的目录,看起来像这样:http://github.com/ccnmtl/ccnmtldjango/tree/master/ccnmtldjango/template/requirements/

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

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

    bootstrap.py 和要求被检查到版本控制中(也是 pip.py 的副本,所以我什至不必在任何地方安装系统范围)。 virtualenv 本身不是。每次推送时,我推送到生产环境的脚本都会在生产服务器上运行 ./bootstrap.py。 (bootstrap.py 也竭尽全力确保它坚持使用 Python 2.5,因为这是我们在生产服务器(Ubuntu Hardy)上拥有的,如果你不小心,我的开发机器(Ubuntu Karmic)默认为 Python 2.6)

    【讨论】:

    • 此答案中的链接已损坏。请问可以改正吗?
    【解决方案2】:

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

    1. 在我们的源代码树中,我们维护了一个 requirements.txt 文件。我们将手动维护它。
    2. 当我们发布新版本时,Fabric 脚本会根据我们传递的任何树状结构创建一个存档。
    3. Fabric 将使用 git log -1 --format=format:%h TREEISH 找到我们正在部署的 SHA。这给了我们SHA_OF_THE_RELEASE
    4. Fabric 将使用git log -1 --format=format:%h SHA_OF_THE_RELEASE requirements.txt 获取我们需求文件的最后一个 SHA。这会输出哈希的简短版本,例如 1d02afc,这是该特定版本的该文件的 SHA。
    5. Fabric 脚本随后将查看我们的 virtualenvs 存储在远程主机上的目录。
      1. 如果没有名为1d02afc 的目录,则会创建一个新的virtualenv 并使用pip install -E /path/to/venv/1d02afc -r /path/to/requirements.txt 进行设置
      2. 如果存在一个现有的path/to/venv/1d02afc,则什么都不做

    其中最神奇的部分是传递您想要 git 的任何树状结构,并让它进行打包(来自 Fabric)。通过使用git archive my-branchgit archive 1d02afc 或其他任何方式,我可以保证在我的远程计算机上安装正确的软件包。

    我走这条路是因为如果软件包在发布之间没有变化,我真的不想让额外的美德四处飘荡。我也不喜欢在我自己的源代码树中拥有我所依赖的实际包的想法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 2017-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多