使用要求文件指定依赖项 - AWS Elastic Beanstalk

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

使用要求文件指定依赖项

典型的 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

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