使用要求文件指定依赖项 - Amazon Elastic Beanstalk
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用要求文件指定依赖项

典型的 Python 应用程序要依靠其他第三方的 Python 程序包。使用 Elastic Beanstalk Python 平台,您可以通过几种方法来指定应用程序所依赖的 Python 包。

使用 piprequirements.txt

用于安装 Python 包的标准工具为 pip。该工具有一个功能,可让您在一个要求文件中指定所有必需的包(及其版本)。有关需求文件的更多信息,请参阅 pip 文档网站上的需求文件格式

创建名为 requirements.txt 的文件,并将该文件放在源包的顶级目录中。以下是 Django 的示例 requirements.txt 文件。

Django==2.2 mysqlclient==2.0.3

在开发环境中,您可以使用 pip freeze 命令以生成要求文件。

~/my-app$ pip freeze > requirements.txt

为确保要求文件仅包含应用程序实际使用的程序包,请使用仅安装了这些程序包的虚拟环境。在虚拟环境外,pip freeze 的输出将包括在开发计算机上安装的所有 pip 程序包,包括操作系统随附的程序包。

注意

在 Amazon Linux AMI Python 平台版本上,Elastic Beanstalk 本机不支持 Pipenv 或 Pipfiles。如果您使用 Pipenv 管理您应用程序的依赖性,请运行以下命令以生成一个 requirements.txt 文件。

~/my-app$ pipenv lock -r > requirements.txt

要了解更多信息,请参阅 Pipenv 文档中的生成 requirements.txt

使用 Pipenv 和 Pipfile

Pipenv 是一个现代化的 Python 打包工具。该工具将软件包安装与创建和管理应用程序的依赖项文件和 virtualenv 结合起来。有关更多信息,请参阅 Pipenv:适合人工使用的 Python 开发工作流

Pipenv 维护两个文件:

  • Pipfile – 此文件包含各种类型的依赖项和要求。

  • Pipfile.lock – 此文件包含启用确定性构建的版本快照。

您可以在开发环境中创建这些文件,并将这些文件包含在部署到 Elastic Beanstalk 的源包的顶级目录中。有关这两个文件的更多信息,请参阅示例 Pipfile 和 Pipfile.lock

下面的示例使用 Pipenv 来安装 Django 和 Django REST 框架。这些命令会创建 PipfilePipfile.lock 文件。

~/my-app$ pipenv install django ~/my-app$ pipenv install djangorestframework

优先顺序

如果您包含此主题中描述的多个要求文件,则 Elastic Beanstalk 只使用其中一个文件。下面的列表按降序顺序显示优先级。

  1. requirements.txt

  2. Pipfile.lock

  3. Pipfile

注意

从 2023 年 3 月 7 日的 Amazon Linux 2 平台版本开始,如果您提供这些文件中的多个,则 Elastic Beanstalk 将发布一条控制台消息,说明部署期间使用了哪个依赖项文件。

以下步骤描述了 Elastic Beanstalk 在部署实例时安装依赖项所遵循的逻辑。

  • 如果有 requirements.txt 文件,则使用命令 pip install -r requirements.txt

  • 从 2023 年 3 月 7 日的 Amazon Linux 2 平台版本开始,如果没有 requirements.txt 文件但有 Pipfile.lock,则将使用命令 pipenv sync。在该版本之前,使用 pipenv install --ignore-pipfile

  • 如果既没有 requirements.txt 文件也没有 Pipfile.lock,但有 Pipfile,则使用命令 pipenv install --skip-lock

  • 如果找不到三个需求文件中的任何一个,则将不会安装任何应用程序依赖项。