

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

# 安装 Python 依赖项
<a name="working-dags-dependencies"></a>

Python 依赖项是指在 Amazon MWAA 环境中的 Apache Airflow 版本的 Apache Airflow 基础版安装中未包含的任何程序包或发行版。本主题介绍使用 Amazon S3 存储桶中的 `requirements.txt` 文件在 Amazon MWAA 环境中安装 Apache Airflow Python 依赖项的步骤。

**Contents**
+ [

## 先决条件
](#working-dags-dependencies-prereqs)
+ [

## 工作原理
](#working-dags-dependencies-how)
+ [

## Python 依赖项概述
](#working-dags-dependencies-overview)
  + [

### Python 依赖项位置和大小限制
](#working-dags-dependencies-quota)
+ [

## 创建 requirements.txt 文件
](#working-dags-dependencies-test-create)
  + [

### 步骤 1：使用 Amazon MWAA CLI 实用工具测试 Python 依赖项
](#working-dags-dependencies-cli-utility)
  + [

### 步骤 2：创建 `requirements.txt`
](#working-dags-dependencies-syntax-create)
+ [

## 上传 `requirements.txt` 到 Amazon S3
](#configuring-dag-dependencies-upload)
  + [

### 使用 AWS CLI
](#configuring-dag-dependencies-upload-cli)
  + [

### 使用 Amazon S3 控制台
](#configuring-dag-dependencies-upload-console)
+ [

## 在环境中安装 Python 依赖项
](#configuring-dag-dependencies-installing)
  + [

### 在 Amazon MWAA 控制台上指定 `requirements.txt` 的路径（第一次）
](#configuring-dag-dependencies-first)
  + [

### 在 Amazon MWAA 控制台上指定 `requirements.txt` 的版本
](#working-dags-dependencies-mwaaconsole-version)
+ [

## 访问 `requirements.txt` 的日志
](#working-dags-dependencies-logs)
+ [

## 接下来做什么？
](#working-dags-dependencies-next-up)

## 先决条件
<a name="working-dags-dependencies-prereqs"></a>

在完成本页上的步骤之前，您需要具备以下条件。
+ **权限** — 您的管理员 AWS 账户 必须已授予您访问您环境的 [Amazon MWAAFull ConsoleAccess](access-policies.md#console-full-access) 访问控制策略的权限。此外，您的[执行角色](mwaa-create-role.md)必须允许您的 Amazon MWAA 环境访问您的环境所使用的 AWS 资源。
+ **访问权限** — 如果您需要访问公共存储库以便直接在 Web 服务器上安装依赖项，则必须将环境配置为具有**公共网络** Web 服务器访问权限。有关更多信息，请参阅[Apache Airflow 访问模式](configuring-networking.md)。
+ **Amazon S3 配置** — 用于[存储您的 DAGs自定义插件和 Python 依赖项的 Amazon S3 存储桶](mwaa-s3-bucket.md)`requirements.txt`必须配置为已*阻止公共访问*和*启用版本控制*。`plugins.zip`

## 工作原理
<a name="working-dags-dependencies-how"></a>

在 Amazon MWAA 上，您可以安装所有 Python 依赖项，方法是将 `requirements.txt` 文件上传到 Amazon S3 存储桶，然后在每次更新文件时在 Amazon MWAA 控制台上指定该文件的版本。Amazon MWAA 运行 `pip3 install -r requirements.txt`，以在 Apache Airflow 计划程序和每个工作线程上安装 Python 依赖项。

要在环境中运行 Python 依赖项，您必须做三件事：

1. 在本地创建 `requirements.txt` 文件。

1. 将本地 `requirements.txt` 上传到 Amazon S3 中的存储桶。

1. 在 Amazon MWAA 控制台上的**要求文件**字段中指定此文件的版本。

**注意**  
如果这是您首次创建 `requirements.txt` 并将其上传到 Amazon S3 存储桶，则还需要在 Amazon MWAA 控制台上指定文件路径。您只需要完成此步骤一次。

## Python 依赖项概述
<a name="working-dags-dependencies-overview"></a>

你可以从 Python 包索引 PyPi (.org)、Python wheels () 或 Python whe `.whl` els () 或环境中兼容私有的 /Pep-503 存储库上 PyPi托管的 Python 依赖项中安装 Apache Airflow 额外内容和其他 Python 依赖项。

### Python 依赖项位置和大小限制
<a name="working-dags-dependencies-quota"></a>

Apache Airflow 计划程序和工作线程会在 `requirements.txt` 文件中搜索软件包，然后在环境中将该软件包安装到 `/usr/local/airflow/.local/bin` 位置。
+ **大小限制**。我们建议使用 `requirements.txt` 文件，以引用组合大小小于 1 GB 的库。Amazon MWAA 需要安装的库越多，环境上的*启动*时间就越长。尽管 Amazon MWAA 没有明确限制安装的库的大小，但如果无法在十分钟内安装依赖项，Fargate 服务将超时并尝试将环境回滚到稳定状态。

## 创建 requirements.txt 文件
<a name="working-dags-dependencies-test-create"></a>

以下步骤描述了在本地创建 plugins.zip 文件时我们建议的步骤。

### 步骤 1：使用 Amazon MWAA CLI 实用工具测试 Python 依赖项
<a name="working-dags-dependencies-cli-utility"></a>
+ 命令行界面 (CLI) 实用工具可在本地复制 Amazon MWAA 环境。
+ CLI 在本地构建 Docker 容器镜像，类似于 Amazon MWAA 生产镜像。在部署到 Amazon MWAA 之前，您可以使用它来运行本地 Apache Airflow 环境来开发和 DAGs测试自定义插件和依赖项。
+ 要运行 CLI，请参阅[aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images)上的 GitHub。

### 步骤 2：创建 `requirements.txt`
<a name="working-dags-dependencies-syntax-create"></a>

下一节介绍如何在 `requirements.txt` 文件中指定 [Python 程序包索引](https://pypi.org/)中的 Python 依赖项。

------
#### [ Apache Airflow v3 ]

1. **本地测试**。在创建 `requirements.txt` 文件之前，以迭代方式添加其他库以找到程序包及其版本的正确组合。要运行 Amazon MWAA CLI 实用程序，请参阅上的。[aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images) GitHub

1. **查看 Apache Airflow 程序包的 Extras**。要访问亚马逊 MWAA 上为 Apache Airflow v3 安装的软件包列表，请参阅网站。[aws-mwaa-docker-images `requirements.txt`](https://github.com/aws/amazon-mwaa-docker-images/blob/main/requirements.txt) GitHub 

1. **添加约束语句**。在文件顶部添加 Apache Airflow v3 环境的约束文件。`requirements.txt`Apache Airflow 约束文件指定了 Apache Airflow 发布时可用的提供程序版本。

    在以下示例中，用环境的版本号替换 *\$1environment-version\$1* 以及用与环境兼容的 Python 版本替换 *\$1Python-version\$1*。

   有关与 Apache Airflow 环境兼容的 Python 版本的信息，请参阅 [Apache Airflow 版本](airflow-versions.md#airflow-versions-official)。

   ```
   --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-{Airflow-version}/constraints-{Python-version}.txt"
   ```

    如果约束文件确定该 `xyz==1.0` 程序包与环境中的其他程序包不兼容，则 `pip3 install` 将无法阻止不兼容的库安装到环境中。如果任何软件包的安装失败，则可以在日志的相应日志流中访问每个 Apache Airflow 组件（调度程序、工作程序和 Web 服务器）的错误日志。 CloudWatch 有关日志类型的更多信息，请参阅 [访问 Amazon 中的 Airflow 日志 CloudWatch](monitoring-airflow.md)。

1. **Apache Airflow 程序包**。添加[程序包 Extras](http://airflow.apache.org/docs/apache-airflow/2.5.1/extra-packages-ref.html)及其版本 (`==`)。这有助于防止在环境中安装同名但版本不同的程序包。

   ```
   apache-airflow[package-extra]==2.5.1
   ```

1. **Python 库**。在 `requirements.txt` 文件中添加程序包名称和版本 (`==`)。这有助于防止自动应用来自 [PyPi.org](https://pypi.org) 的 future 更新。

   ```
   library == version
   ```  
**Example boto3 和 psycopg2-binary**  

   此示例仅用于演示目的。boto 和 psycopg2-binary 库包含在 Apache Airflow v3 基础版安装中，无需在 `requirements.txt` 文件中指定。

   ```
   boto3==1.17.54
   boto==2.49.0
   botocore==1.20.54
   psycopg2-binary==2.8.6
   ```

   [如果指定的包没有版本，则 Amazon MWAA 会安装.org 中最新版本的PyPi软件包。](https://pypi.org)此版本可能与您 `requirements.txt` 中的其他程序包冲突。

------
#### [ Apache Airflow v2 ]

1. **本地测试**。在创建 `requirements.txt` 文件之前，以迭代方式添加其他库以找到程序包及其版本的正确组合。要运行 Amazon MWAA CLI 实用程序，请参阅上的。[aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images) GitHub

1. **查看 Apache Airflow 程序包的 Extras**。要访问亚马逊 MWAA 上为 Apache Airflow v2 安装的软件包列表，请访问网站。[aws-mwaa-docker-images `requirements.txt`](https://github.com/aws/amazon-mwaa-docker-images/blob/main/requirements.txt) GitHub 

1. **添加约束语句**。在 `requirements.txt` 文件顶部添加 Apache Airflow v2 环境的约束文件。Apache Airflow 约束文件指定了 Apache Airflow 发布时可用的提供程序版本。

    从 Apache Airflow v2.7.2 开始，要求文件必须包含一条 `--constraint` 语句。如果您未提供约束条件，Amazon MWAA 将为您指定一个约束条件，以确保您的要求中列出的程序包与您正在使用的 Apache Airflow 版本兼容。

   在以下示例中，用环境的版本号替换 *\$1environment-version\$1* 以及用与环境兼容的 Python 版本替换 *\$1Python-version\$1*。

   有关与 Apache Airflow 环境兼容的 Python 版本的信息，请参阅 [Apache Airflow 版本](airflow-versions.md#airflow-versions-official)。

   ```
   --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-{Airflow-version}/constraints-{Python-version}.txt"
   ```

   如果约束文件确定该 `xyz==1.0` 程序包与环境中的其他程序包不兼容，则 `pip3 install` 将无法阻止不兼容的库安装到环境中。如果任何软件包的安装失败，则可以在日志的相应日志流中访问每个 Apache Airflow 组件（调度程序、工作程序和 Web 服务器）的错误日志。CloudWatch 有关日志类型的更多信息，请参阅 [访问 Amazon 中的 Airflow 日志 CloudWatch](monitoring-airflow.md)。

1. **Apache Airflow 程序包**。添加[程序包 Extras](http://airflow.apache.org/docs/apache-airflow/2.5.1/extra-packages-ref.html)及其版本 (`==`)。这有助于防止在环境中安装同名但版本不同的程序包。

   ```
   apache-airflow[package-extra]==2.5.1
   ```

1. **Python 库**。在 `requirements.txt` 文件中添加程序包名称和版本 (`==`)。这有助于防止自动应用来自 [PyPi.org](https://pypi.org) 的 future 更新。

   ```
   library == version
   ```  
**Example boto3 和 psycopg2-binary**  

   此示例仅用于演示目的。boto 和 psycopg2-binary 库包含在 Apache Airflow v2 基础版安装中，无需在 `requirements.txt` 文件中指定。

   ```
   boto3==1.17.54
   boto==2.49.0
   botocore==1.20.54
   psycopg2-binary==2.8.6
   ```

   [如果指定的包没有版本，则 Amazon MWAA 会安装.org 中最新版本的PyPi软件包。](https://pypi.org)此版本可能与您 `requirements.txt` 中的其他程序包冲突。

------

## 上传 `requirements.txt` 到 Amazon S3
<a name="configuring-dag-dependencies-upload"></a>

您可以使用 Amazon S3 控制台或 AWS Command Line Interface (AWS CLI) 将`requirements.txt`文件上传到您的 Amazon S3 存储桶。

### 使用 AWS CLI
<a name="configuring-dag-dependencies-upload-cli"></a>

 AWS Command Line Interface (AWS CLI) 是一个开源工具，您可以使用命令行 shell 中的命令与 AWS 服务进行交互。要完成本节中的步骤，您需要以下满足以下条件：
+ [AWS CLI — 安装版本 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)。
+ [AWS CLI — 使用快速配置`aws configure`](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。

**要使用上传 AWS CLI**

1. 以下示例列出所有 Amazon S3 存储桶。

   ```
   aws s3 ls
   ```

1. 使用以下命令列出 Amazon S3 存储桶中适合环境的文件和文件夹。

   ```
   aws s3 ls s3://YOUR_S3_BUCKET_NAME
   ```

1. 以下命令将 `requirements.txt` 文件上传到 Amazon S3 存储桶。

   ```
   aws s3 cp requirements.txt s3://amzn-s3-demo-bucket/requirements.txt
   ```

### 使用 Amazon S3 控制台
<a name="configuring-dag-dependencies-upload-console"></a>

Amazon S3 控制台是一个基于 Web 的用户界面，可用来创建和管理 Amazon S3 存储桶中的资源。

**要使用 Amazon S3 控制台上传，请执行以下操作**

1. 在 Amazon MWAA 控制台上打开[环境页面](https://console.aws.amazon.com/mwaa/home#/environments)。

1. 选择环境。

1. 在 **S3 中的 DAG 代码**窗格中选择 **S3 存储桶**链接，在控制台上打开存储桶。

1. 选择**上传**。

1. 选择 **添加文件**。

1. 选择 `requirements.txt` 的本地副本，选择**上传**。

## 在环境中安装 Python 依赖项
<a name="configuring-dag-dependencies-installing"></a>

本节介绍如何安装您上传到 Amazon S3 存储桶的依赖项，方法是指定 requirements.txt 文件的路径，并在每次更新时指定 requirements.txt 文件的版本。

### 在 Amazon MWAA 控制台上指定 `requirements.txt` 的路径（第一次）
<a name="configuring-dag-dependencies-first"></a>

如果这是您首次创建 `requirements.txt` 并将其上传到 Amazon S3 存储桶，则还需要在 Amazon MWAA 控制台上指定文件路径。您只需要完成此步骤一次。

1. 在 Amazon MWAA 控制台上打开[环境页面](https://console.aws.amazon.com/mwaa/home#/environments)。

1. 选择环境。

1. 选择**编辑**。

1. 在 **Amazon S3 中的 DAG 代码**窗格上，选择**要求文件 - 可选**字段旁边的**浏览 S3**。

1. 选择 Amazon S3 存储桶中的 `requirements.txt` 文件。

1. 选择**选择**。

1. 选择**下一步**、**更新环境**。

您可以在环境完成更新后立即开始使用新程序包。

### 在 Amazon MWAA 控制台上指定 `requirements.txt` 的版本
<a name="working-dags-dependencies-mwaaconsole-version"></a>

每次在 Amazon S3 存储桶中上传 `requirements.txt` 的新版本时，都需要在 Amazon MWAA 控制台上指定 `requirements.txt` 文件的版本。

1. 在 Amazon MWAA 控制台上打开[环境页面](https://console.aws.amazon.com/mwaa/home#/environments)。

1. 选择环境。

1. 选择**编辑**。

1. 在 **Amazon S3 中的 DAG 代码**窗格中，从下拉列表中选择 `requirements.txt` 的版本。

1. 选择**下一步**、**更新环境**。

您可以在环境完成更新后立即开始使用新程序包。

## 访问 `requirements.txt` 的日志
<a name="working-dags-dependencies-logs"></a>

您可以查看调度工作流程并解析 `dags` 文件夹的计划程序的 Apache Airflow 日志。以下步骤介绍如何在 Amazon MWAA 控制台上打开计划程序的日志组，以及如何在日志控制台上访问 Apache Airflow 日志。 CloudWatch 

**访问 `requirements.txt` 的日志**

1. 在 Amazon MWAA 控制台上打开[环境页面](https://console.aws.amazon.com/mwaa/home#/environments)。

1. 选择环境。

1. 在**监控**窗格上选择 **Airflow 计划程序日志组**。

1. 在**日志流**中选择 `requirements_install_ip` 日志。

1. 请参阅 `/usr/local/airflow/.local/bin` 上环境中安装的程序包列表。例如：

   ```
   Collecting appdirs==1.4.4 (from -r /usr/local/airflow/.local/bin (line 1))
   Downloading https://files.pythonhosted.org/packages/3b/00/2344469e2084fb28kjdsfiuyweb47389789vxbmnbjhsdgf5463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl  
   Collecting astroid==2.4.2 (from -r /usr/local/airflow/.local/bin (line 2))
   ```

1. 查看程序包列表以及其中任何程序包在安装过程中是否遇到错误。如果出现问题，您可能会看到类似以下的错误：

   ```
   2021-03-05T14:34:42.731-07:00
   No matching distribution found for LibraryName==1.0.0 (from -r /usr/local/airflow/.local/bin (line 4))
   No matching distribution found for LibraryName==1.0.0 (from -r /usr/local/airflow/.local/bin (line 4))
   ```

## 接下来做什么？
<a name="working-dags-dependencies-next-up"></a>

使用[aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images)在本地测试你的 DAGs自定义插件和 Python 依赖关系 GitHub。