

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

# 在 Elastic Beanstalk 上使用要求文件指定依赖项
<a name="python-configuration-requirements"></a>

本主题介绍如何配置您的应用程序以安装其所需的其他 Python 包。典型的 Python 应用程序要依靠其他第三方的 Python 程序包。使用 Elastic Beanstalk Python 平台，您可以通过多种方法来指定应用程序所依赖的 Python 包。

## 使用 `pip` 和 `requirements.txt`
<a name="python-configuration-requirements.txt"></a>

用于安装 Python 包的标准工具为 `pip`。该工具有一个功能，可让您在一个要求文件中指定所有必需的包（及其版本）。有关需求文件的更多信息，请参阅 pip 文档网站上的[需求文件格式](https://pip.pypa.io/en/latest/reference/requirements-file-format/#requirements-file-format)。

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

```
Django==2.2
mysqlclient==2.0.3
```

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

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

为确保要求文件仅包含应用程序实际使用的程序包，请使用仅安装了这些程序包的[虚拟环境](python-development-environment.md#python-common-setup-venv)。在虚拟环境外，`pip freeze` 的输出将包括在开发计算机上安装的所有 `pip` 程序包，包括操作系统随附的程序包。

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

```
~/my-app$ pipenv lock -r > requirements.txt
```
要了解更多信息，请参阅 Pipenv 文档中的[生成 requirements.txt](https://pipenv.readthedocs.io/en/latest/advanced/#generating-a-requirements-txt)。

## 使用 Pipenv 和 `Pipfile`
<a name="python-configuration-requirements.pipenv"></a>

Pipenv 是一个现代化的 Python 打包工具。该工具将软件包安装与创建和管理应用程序的依赖项文件和 virtualenv 结合起来。有关更多信息，请参阅 [Pipenv：适合人工使用的 Python 开发工作流](https://pipenv.readthedocs.io/en/latest/)。

Pipenv 维护两个文件：
+ `Pipfile` – 此文件包含各种类型的依赖项和要求。
+ `Pipfile.lock` – 此文件包含启用确定性构建的版本快照。

您可以在开发环境中创建这些文件，并将这些文件包含在部署到 Elastic Beanstalk 的源包的顶级目录中。有关这两个文件的更多信息，请参阅[示例 Pipfile 和 Pipfile.lock](https://pipenv.pypa.io/en/latest/basics/#)。



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

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

 

## 优先级
<a name="python-configuration-requirements.precedence"></a>

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

1. `requirements.txt`

1. `Pipfile.lock`

1. `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`。
+ 如果找不到三个需求文件中的任何一个，则将不会安装任何应用程序依赖项。