Heroku 如何处理 Django 依赖项?

How does Heroku handle Django dependencies?

我开始着手我的第一个 Django/Heroku 项目 – 我正在开发一个已经部分编码的朋友的网络应用程序。它内置于 Django 1.6 中。没有 virtualenv,当我克隆它并尝试在 Django 1.8 中 运行 它时,它崩溃并烧毁。该应用程序本身目前在线且正常运行,当我 运行 在 Django 1.6 中本地应用程序时,没有问题。 Heroku 如何处理这样的依赖关系?它是否通过读取 requirements.txt?

在其服务器上安装依赖项

当您的 Web 实例启动时,可以通过 pip requirements.txt file. You may also specify in your Procfile 脚本将依赖项安装到 运行。我个人有一个从 Procfile 引用的 运行 脚本,运行 是我的 Pyramid(类似于 DJango 的网络框架)setup.py 文件用于部署,也可以安装依赖项。

Heroku 部署中包含三个配置文件:

  1. runtime.txt:在这里您可以指定您的python运行时间。它是可选的,我相信默认是 2.7.9.
  2. requirements.txt:此文件包含应安装到您的 python 环境中的 python 依赖项。在部署 Heroku 期间将 运行:

    pip install -r requirements.txt
    

    这将安装文件中包含的所有依赖项。如果你本地环境安装了pip(python3.4自带,其他运行次可能需要单独安装),应该可以生成这个内容通过 运行ning:

    为您的本地环境创建文件
    pip freeze
    
  3. Procfile:在这里你应该定义你的 Heroku dynos 运行 的命令。通常,运行ning 您的 Django 项目的命令。

Heroku 仅使用您的 requirements.txt 文件中的库。无论指定什么版本的 Django,它都会安装什么。

Heroku 会安装您在 requirements.txt 文件中指定的任何版本的 python 软件包。例如,如果它包含:

requests
Django

它将安装这些包的最新版本,因为没有指定版本。相反,如果你 want/need Heroku 要安装版本 X.Y 的包,你需要在需求文件中指定,如:

requests==2.6.2
Django==1.8

这将使 heroku 在版本 2.6.2 和 1.8 上分别安装 requestsDjango

更新:作为额外说明,请注意这不是 Heroku 特有的。 Heroku 简单地 运行s pip install -r requirements.txt 结果与在本地 运行 相同。