

# 从源代码构建和安装 AWS CLI
<a name="getting-started-source-install"></a>

本主题介绍如何在受支持的操作系统上从源代码安装或更新到最新版本的 AWS Command Line Interface（AWS CLI）。

有关 AWS CLI 最新版本的信息，请参阅 GitHub 上的 [AWS CLI 版本 2 更改日志](https://raw.githubusercontent.com/aws/aws-cli/v2/CHANGELOG.rst)。

**重要**  
AWS CLI 版本 1 和 2 使用相同的 `aws` 命令名称。如果您之前安装了 AWS CLI 版本 1，请参阅[AWS CLI 版本 2 的迁移指南](cliv2-migration.md)。

**Topics**
+ [为什么要从源代码构建？](#source-getting-started-install-why)
+ [快速步骤](#source-getting-started-install-quicksteps)
+ [步骤 1：设置所有要求](#source-getting-started-install-reqs)
+ [步骤 2：配置 AWS CLI 源代码安装](#source-getting-started-install-config)
+ [步骤 3：构建 AWS CLI](#source-getting-started-install-build)
+ [步骤 4：安装 AWS CLI](#source-getting-started-install-instructions)
+ [步骤 5：验证 AWS CLI 安装](#source-getting-started-install-verify)
+ [工作流程示例](#source-getting-started-install-workflows)
+ [AWS CLI 安装和卸载错误故障排除](#source-install-tshoot)
+ [后续步骤](#source-install-next-steps)

## 为什么要从源代码构建？
<a name="source-getting-started-install-why"></a>

AWS CLI 可用作大多数平台和环境以及 Docker 映像的[预构建安装程序](getting-started-install.md)。

通常，这些安装程序涵盖了大多数使用案例。从源代码安装的说明旨在帮助解决我们的安装程序未涵盖的使用案例。部分使用案例包括：
+ 预构建的安装程序不支持您的环境。例如，预构建的安装程序不支持 ARM 32 位。
+ 预构建的安装程序具有您的环境所缺少的依赖项。例如，Alpine Linux 使用 [https://musl.libc.org/](https://musl.libc.org/)，但当前安装程序需要 `glibc`，而导致预构建的安装程序无法立即运行。
+ 预构建的安装程序需要您的环境限制访问的资源。例如，安全强化型系统可能不会授予对共享内存的权限。这是冻结的 `aws` 安装程序所需要的。
+ 因为最好能够完全控制代码和软件包的构建过程，而预构建的安装程序通常会成为软件包管理器中维护者的阻碍。从源代码构建使发行版维护者可以通过更简化的流程来保持 AWS CLI 处于更新状态。当从第三方软件包管理器（如 `brew`、`yum` 和 `apt`）安装时，启用维护者可为客户提供更新版本的 AWS CLI。
+ 修补 AWS CLI 功能的客户需要从源代码构建和安装 AWS CLI。这对于想要在向 AWS CLI GitHub 存储库提供更改之前测试对源代码所做更改的社区成员来说尤为重要。

## 快速步骤
<a name="source-getting-started-install-quicksteps"></a>

**注意**  
假设所有代码示例都从源代码目录的根目录运行。

要从源代码构建和安装 AWS CLI，请按本节中的步骤操作。AWS CLI 利用 [GNU Autotools](https://www.gnu.org/software/automake/faq/autotools-faq.html) 从源代码进行安装。在最简单的情况下，可以通过从 AWS CLI GitHub 存储库的根目录运行默认示例命令，以从源代码安装 AWS CLI。



1. [设置您的环境的所有要求。](#source-getting-started-install-reqs)这包括能够运行 [GNU Auttols](https://www.gnu.org/software/automake/faq/autotools-faq.html) 生成的文件以及安装 Python 3.8 或更高版本。

1. 在终端中，导航到 AWS CLI 源代码文件夹的顶层并运行 `./configure` 命令。此命令会检查系统是否具有所有必需的依赖项，并生成 `Makefile` 以根据检测到的和指定的配置来构建和安装 AWS CLI。

------
#### [ Linux and macOS ]

   以下 `./configure` 命令示例使用默认设置为 AWS CLI 设置构建配置。

   ```
   $ ./configure
   ```

------
#### [ Windows PowerShell ]

   在运行任何调用 MSYS2 的命令之前，必须保留当前工作目录：

   ```
   PS C:\> $env:CHERE_INVOKING = 'yes'
   ```

   然后，使用以下 `./configure` 命令示例设置构建配置，以便 AWS CLI 使用 Python 可执行文件的本地路径、安装到 C:\$1Program Files\$1AWSCLI 并下载所有依赖项。

   ```
   PS C:\> C:\msys64\usr\bin\bash  -lc " PYTHON='C:\path\to\python.exe' ./configure --prefix='C:\Program Files\AWSCLI' --with-download-deps "
   ```

------

   有关详细信息、可用配置选项和默认设置信息，请参阅 [步骤 2：配置 AWS CLI 源代码安装](#source-getting-started-install-config) 部分。

1. 运行 `make` 命令。此命令根据您的配置设置构建 AWS CLI。

   以下 `make` 命令示例使用您的现有 `./configure` 设置通过默认选项进行构建。

------
#### [ Linux and macOS ]

   ```
   $ make
   ```

------
#### [ Windows PowerShell ]

   ```
   PS C:\> C:\msys64\usr\bin\bash -lc "make" 
   ```

------

   有关详细信息和可用的构建选项，请参阅 [步骤 3：构建 AWS CLI](#source-getting-started-install-build) 部分。

1. 运行 `make install` 命令。此命令将您构建的 AWS CLI 安装到系统上所配置的位置。

   以下 `make install` 命令示例使用默认命令设置，在所配置的位置安装您构建的 AWS CLI 并创建符号链接。

------
#### [ Linux and macOS ]

   ```
   $ make install
   ```

------
#### [ Windows PowerShell ]

   ```
   PS C:\> C:\msys64\usr\bin\bash -lc "make install" 
   ```

   安装后，使用以下方法将路径添加到 AWS CLI：

   ```
   PS C:\> $Env:PATH +=";C:\Program Files\AWSCLI\bin\"
   ```

------

   有关详细信息和可用的安装选项，请参阅 [步骤 4：安装 AWS CLI](#source-getting-started-install-instructions) 部分。

1. 使用以下命令确认成功安装了 AWS CLI：

   ```
   $ aws --version
   aws-cli/2.27.41 Python/3.11.6 Windows/10 exe/AMD64 prompt/off
   ```

   有关安装错误的故障排除步骤，请参阅 [AWS CLI 安装和卸载错误故障排除](#source-install-tshoot) 部分。

## 步骤 1：设置所有要求
<a name="source-getting-started-install-reqs"></a>

要从源代码构建 AWS CLI，您需要事先完成以下步骤：

**注意**  
假设所有代码示例都从源代码目录的根目录运行。

1. 通过分流 AWS CLI GitHub 存储库或下载源代码压缩包来下载 AWS CLI 源代码。有关说明，请参阅以下内容之一：
   + 从 *GitHub* 分流和克隆 [AWS CLI 存储库](https://github.com/aws/aws-cli)。有关更多信息，请参阅《GitHub 文档》**中的[分流存储库](https://docs.github.com/en/get-started/quickstart/fork-a-repo)。
   + 使用以下命令在 [https://awscli.amazonaws.com/awscli.tar.gz](https://awscli.amazonaws.com/awscli.tar.gz) 中下载最新的 tarball 源代码并提取内容：

     ```
     $ curl "https://awscli.amazonaws.com/awscli.tar.gz" -o "awscli.tar.gz"
     $ tar -xzf awscli.tar.gz
     ```
**注意**  
要下载特定版本，请使用以下链接格式：[https://awscli.amazonaws.com/awscli-*versionnumber*.tar.gz](https://awscli.amazonaws.com/awscli.tar.gz)   
例如，对于版本 2.10.0，链接如下：[https://awscli.amazonaws.com/awscli-*2.10.0*.tar.gz](https://awscli.amazonaws.com/awscli.tar.gz)  
源版本从 AWS CLI 的 **2.10.0** 版本开始可用。

     **（可选）通过完成以下步骤，验证下载的 zip 文件的完整性：**

     1. 您可以通过以下步骤使用 `GnuPG` 工具验证签名。

        AWS CLI 安装程序包 `.zip` 文件是使用 PGP 签名进行加密签名的。如果文件有任何损坏或更改，则此验证失败，您不应继续安装。

     1. 使用您的程序包管理器下载并安装 `gpg` 命令。有关 `GnuPG` 的更多信息，请参阅 [GnuPG 网站](https://www.gnupg.org/)。

     1. 要创建公有密钥文件，请创建一个文本文件并粘贴到以下文本中。

        ```
        -----BEGIN PGP PUBLIC KEY BLOCK-----
        
        mQINBF2Cr7UBEADJZHcgusOJl7ENSyumXh85z0TRV0xJorM2B/JL0kHOyigQluUG
        ZMLhENaG0bYatdrKP+3H91lvK050pXwnO/R7fB/FSTouki4ciIx5OuLlnJZIxSzx
        PqGl0mkxImLNbGWoi6Lto0LYxqHN2iQtzlwTVmq9733zd3XfcXrZ3+LblHAgEt5G
        TfNxEKJ8soPLyWmwDH6HWCnjZ/aIQRBTIQ05uVeEoYxSh6wOai7ss/KveoSNBbYz
        gbdzoqI2Y8cgH2nbfgp3DSasaLZEdCSsIsK1u05CinE7k2qZ7KgKAUIcT/cR/grk
        C6VwsnDU0OUCideXcQ8WeHutqvgZH1JgKDbznoIzeQHJD238GEu+eKhRHcz8/jeG
        94zkcgJOz3KbZGYMiTh277Fvj9zzvZsbMBCedV1BTg3TqgvdX4bdkhf5cH+7NtWO
        lrFj6UwAsGukBTAOxC0l/dnSmZhJ7Z1KmEWilro/gOrjtOxqRQutlIqG22TaqoPG
        fYVN+en3Zwbt97kcgZDwqbuykNt64oZWc4XKCa3mprEGC3IbJTBFqglXmZ7l9ywG
        EEUJYOlb2XrSuPWml39beWdKM8kzr1OjnlOm6+lpTRCBfo0wa9F8YZRhHPAkwKkX
        XDeOGpWRj4ohOx0d2GWkyV5xyN14p2tQOCdOODmz80yUTgRpPVQUtOEhXQARAQAB
        tCFBV1MgQ0xJIFRlYW0gPGF3cy1jbGlAYW1hem9uLmNvbT6JAlQEEwEIAD4CGwMF
        CwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQT7Xbd/1cEYuAURraimMQrMRnJHXAUC
        aGveYQUJDMpiLAAKCRCmMQrMRnJHXKBYD/9Ab0qQdGiO5hObchG8xh8Rpb4Mjyf6
        0JrVo6m8GNjNj6BHkSc8fuTQJ/FaEhaQxj3pjZ3GXPrXjIIVChmICLlFuRXYzrXc
        Pw0lniybypsZEVai5kO0tCNBCCFuMN9RsmmRG8mf7lC4FSTbUDmxG/QlYK+0IV/l
        uJkzxWa+rySkdpm0JdqumjegNRgObdXHAQDWlubWQHWyZyIQ2B4U7AxqSpcdJp6I
        S4Zds4wVLd1WE5pquYQ8vS2cNlDm4QNg8wTj58e3lKN47hXHMIb6CHxRnb947oJa
        pg189LLPR5koh+EorNkA1wu5mAJtJvy5YMsppy2y/kIjp3lyY6AmPT1posgGk70Z
        CmToEZ5rbd7ARExtlh76A0cabMDFlEHDIK8RNUOSRr7L64+KxOUegKBfQHb9dADY
        qqiKqpCbKgvtWlds909Ms74JBgr2KwZCSY1HaOxnIr4CY43QRqAq5YHOay/mU+6w
        hhmdF18vpyK0vfkvvGresWtSXbag7Hkt3XjaEw76BzxQH21EBDqU8WJVjHgU6ru+
        DJTs+SxgJbaT3hb/vyjlw0lK+hFfhWKRwgOXH8vqducF95NRSUxtS4fpqxWVaw3Q
        V2OWSjbne99A5EPEySzryFTKbMGwaTlAwMCwYevt4YT6eb7NmFhTx0Fis4TalUs+
        j+c7Kg92pDx2uQ==
        =OBAt
        -----END PGP PUBLIC KEY BLOCK-----
        ```

        以下是公有密钥的详细信息以供参考。

        ```
        Key ID:           A6310ACC4672
        Type:             RSA
        Size:             4096/4096
        Created:          2019-09-18
        Expires:          2026-07-07
        User ID:          AWS CLI Team <aws-cli@amazon.com>
        Key fingerprint:  FB5D B77F D5C1 18B8 0511  ADA8 A631 0ACC 4672 475C
        ```

     1. 使用以下命令导入 AWS CLI 公有密钥，用您创建的公有密钥的文件名替换 *public-key-file-name*。

        ```
        $ gpg --import public-key-file-name
        gpg: /home/username/.gnupg/trustdb.gpg: trustdb created
        gpg: key A6310ACC4672475C: public key "AWS CLI Team <aws-cli@amazon.com>" imported
        gpg: Total number processed: 1
        gpg:               imported: 1
        ```

     1. 通过 [https://awscli.amazonaws.com/awscli.tar.gz.sig](https://awscli.amazonaws.com/awscli.tar.gz.sig) 下载您已下载的软件包的 AWS CLI 签名文件。它具有与其对应的压缩包文件相同的路径和名称，但扩展名为 `.sig`。将其保存在与压缩包文件相同的路径中。或者使用以下命令块：

        ```
        $ curl awscliv2.sig https://awscli.amazonaws.com/ -o awscli.tar.gz.sig
        ```

     1. 验证签名，并将下载的 `.sig` 和 `.zip` 文件名作为参数传递给 `gpg` 命令。

        ```
        $ gpg --verify awscliv2.sig awscli.tar.gz
        ```

        该输出值应该类似于以下内容。

        ```
        gpg: Signature made Mon Nov  4 19:00:01 2019 PST
        gpg:                using RSA key FB5D B77F D5C1 18B8 0511 ADA8 A631 0ACC 4672 475C
        gpg: Good signature from "AWS CLI Team <aws-cli@amazon.com>" [unknown]
        gpg: WARNING: This key is not certified with a trusted signature!
        gpg:          There is no indication that the signature belongs to the owner.
        Primary key fingerprint: FB5D B77F D5C1 18B8 0511  ADA8 A631 0ACC 4672 475C
        ```
**重要**  
输出中的警告是预料中的，并不表示出现了问题。之所以出现此警告，是因为您的个人 PGP 密钥（如果您有）和 AWS CLI PGP 密钥之间没有信任链。有关更多信息，请参阅[信任 Web](https://wikipedia.org/wiki/Web_of_trust)。

1. 您的环境可以运行 [GNU Autotools](https://www.gnu.org/software/automake/faq/autotools-faq.html) 生成的文件，如 `configure` 和 `Makefile`。这些文件可跨 POSIX 平台广泛移植。

------
#### [ Linux and macOS ]

   如果您的环境中尚未安装 Autotools 或者您需要对其进行更新，请按照《GNU 文档》中**的[如何安装 Autotools（以用户身份）？](https://www.gnu.org/software/automake/faq/autotools-faq.html#How-do-I-install-the-Autotools-_0028as-user_0029_003f)或[基本安装](https://www.gnu.org/savannah-checkouts/gnu/automake/manual/automake.html#Basic-Installation)中的安装说明进行操作。

------
#### [ Windows PowerShell ]

**警告**  
我们建议，如果您在 Windows 环境中，请使用预构建的安装程序。有关预构建的安装程序的安装说明，请参阅 [安装或更新最新版本的 AWS CLI](getting-started-install.md)

   由于 Windows 没有与 POSIX 兼容的 Shell，因此需要安装其他软件才能从源代码安装 AWS CLI。[MSYS2](https://www.msys2.org/) 提供了一系列工具和库来帮助构建和安装 Windows 软件，特别是对于 Autotools 使用的基于 POSIX 的脚本。

   1. 安装 MSYS2。有关安装和使用 MSYS2 的信息，请参阅《MSYS2 文档》**中的[安装和使用说明](https://www.msys2.org/)。

   1. 打开 MSYS2 终端并使用以下命令安装自动工具。

      ```
      $ pacman -S autotools
      ```

**注意**  
使用本指南中适用于 Windows 的配置、构建和安装代码示例时，假定默认的 MSYS2 安装路径为 `C:\msys64\usr\bin\bash`。在 PowerShell 中调用 MSYS2 时，您将使用以下格式，且 bash 命令加上引号：  

   ```
   PS C:\> C:\msys64\usr\bin\bash  -lc "command example" 
   ```
以下命令示例调用 `./configure` 命令。  

   ```
   PS C:\> C:\msys64\usr\bin\bash  -lc "./configure" 
   ```

------

1. 安装了 Python 3.8 或更高版本的解释器。所需的最低 Python 版本遵循与 [AWS SDK 和工具的官方 Python 支持策略](https://aws.amazon.com/blogs/developer/python-support-policy-updates-for-aws-sdks-and-tools/)相同的时间表。解释器在其支持结束日期后 6 个月才获得支持。

1. **（可选）**安装 AWS CLI 的所有构建和运行时 Python 库依赖项。`./configure` 命令会通知您是否缺少任何依赖项以及如何安装它们。

   您可以通过配置自动安装和使用这些依赖项。有关更多信息，请参阅 [下载依赖项](#source-getting-started-install-config-dependencies)。

## 步骤 2：配置 AWS CLI 源代码安装
<a name="source-getting-started-install-config"></a>

构建和安装 AWS CLI 的配置是使用 `configure` 脚本指定的。要获取所有配置选项的文档，请使用 `--help` 选项运行 `configure` 脚本：

------
#### [ Linux and macOS ]

```
$ ./configure --help
```

------
#### [ Windows PowerShell ]

```
PS C:\> C:\msys64\usr\bin\bash -lc "./configure --help" 
```

------

**Topics**
+ [安装位置](#source-getting-started-install-config-location)
+ [Python 解释器](#source-getting-started-install-config-interpreter)
+ [下载依赖项](#source-getting-started-install-config-dependencies)
+ [安装类型](#source-getting-started-install-config-type)

### 安装位置
<a name="source-getting-started-install-config-location"></a>

AWS CLI 的源代码安装使用两个可配置的目录来安装 AWS CLI：
+ `libdir` - 将在其中安装 AWS CLI 的父目录。AWS CLI 安装的路径是 `<libdir-value>/aws-cli`。Linux 和 macOS 的默认 `libdir` 值是 `/usr/local/lib`，它创建默认安装目录 `/usr/local/lib/aws-cli` 
+ `bindir` - 安装 AWS CLI 可执行文件的目录。默认位置是 `/usr/local/bin`。

以下 `configure` 选项控制所使用的目录：
+ `--prefix` - 设置要用于安装的目录前缀。Linux 和 macOS 的默认值为 `/usr/local`。
+ `--libdir` - 设置要用于安装 AWS CLI 的 `libdir`。默认值为 `<prefix-value>/lib`。如果未指定 `--libdir` 和 `--prefix`，则 Linux 和 macOS 的默认设置为 `/usr/local/lib/`。
+ `--bindir` - 设置要用于安装 AWS CLI `aws` 和 `aws_completer` 可执行文件的 `bindir`。默认值为 `<prefix-value>/bin`。如果未指定 `bindir` 和 `--prefix`，则 Linux 和 macOS 的默认设置为 `/usr/local/bin/`。

------
#### [ Linux and macOS ]

以下命令示例使用 `--prefix` 选项执行 AWS CLI 的本地用户安装。此命令将 AWS CLI 安装在 `$HOME/.local/lib/aws-cli` 中，并将可执行文件安装在 `$HOME/.local/bin` 中：

```
$ ./configure --prefix=$HOME/.local
```

以下命令示例使用 `--libdir` 选项将 AWS CLI 作为附加应用程序安装在 `/opt` 目录中。此命令将 AWS CLI 安装在 `/opt/aws-cli` 中，并将可执行文件安装在其默认位置 `/usr/local/bin` 中。

```
$ ./configure --libdir=/opt
```

------
#### [ Windows PowerShell ]

以下命令示例使用 `--prefix` 选项执行 AWS CLI 的本地用户安装。此命令将 AWS CLI 安装在 `$HOME/.local/lib/aws-cli` 中，并将可执行文件安装在 `$HOME/.local/bin` 中：

```
$ C:\msys64\usr\bin\bash -lc "./configure --prefix='C:\Program Files\AWSCLI'" 
```

以下命令示例使用 `--libdir` 选项将 AWS CLI 作为附加应用程序安装在 `/opt` 目录中。此命令将 AWS CLI 安装在 `C:\Program Files\AWSCLI\opt\aws-cli` 中。

------

### Python 解释器
<a name="source-getting-started-install-config-interpreter"></a>

**注意**  
强烈建议在针对 Windows 进行安装时指定 Python 解释器。

`./configure` 脚本会自动选择已安装的 Python 3.8 或更高版本的解释器，用于通过 [https://www.gnu.org/software/automake/manual/html_node/Python.html](https://www.gnu.org/software/automake/manual/html_node/Python.html) Autoconf 宏来构建和运行 AWS CLI。

运行 `configure` 脚本时，可以使用 `PYTHON` 环境变量显式设置要使用的 Python 解释器：

------
#### [ Linux and macOS ]

```
$ PYTHON=/path/to/python ./configure
```

------
#### [ Windows PowerShell ]

```
PS C:\> C:\msys64\usr\bin\bash -lc "PYTHON='C:\path\to\python' ./configure"
```

------

### 下载依赖项
<a name="source-getting-started-install-config-dependencies"></a>

默认情况下，要求 AWS CLI 的所有构建和运行时依赖项都已安装在系统上。这包括任何 Python 库依赖项。运行 `configure` 脚本时会检查所有依赖项，如果系统缺少任何 Python 依赖项，则 `configure` 脚本会出错。

当您的系统缺少依赖项时，以下代码示例会出错：

------
#### [ Linux and macOS ]

```
$ ./configure 
checking for a Python interpreter with version >= 3.8... python
checking for python... /Users/username/.envs/env3.11/bin/python
checking for python version... 3.11
checking for python platform... darwin
checking for GNU default python prefix... ${prefix}
checking for GNU default python exec_prefix... ${exec_prefix}
checking for python script directory (pythondir)... ${PYTHON_PREFIX}/lib/python3.11/site-packages
checking for python extension module directory (pyexecdir)... ${PYTHON_EXEC_PREFIX}/lib/python3.11/site-packages
checking for --with-install-type... system-sandbox
checking for --with-download-deps... Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/Users/username/aws-code/aws-cli/./backends/build_system/__main__.py", line 125, in <module>
    main()
  File "/Users/username/aws-code/aws-cli/./backends/build_system/__main__.py", line 121, in main
    parsed_args.func(parsed_args)
  File "/Users/username/aws-code/aws-cli/./backends/build_system/__main__.py", line 49, in validate
    validate_env(parsed_args.artifact)
  File "/Users/username/aws-code/aws-cli/./backends/build_system/validate_env.py", line 68, in validate_env
    raise UnmetDependenciesException(unmet_deps, in_venv)
validate_env.UnmetDependenciesException: Environment requires following Python dependencies:

awscrt (required: ('>=0.12.4', '<0.17.0')) (version installed: None)

We recommend using --with-download-deps flag to automatically create a virtualenv and download the dependencies.

If you want to manage the dependencies yourself instead, run the following pip command:
/Users/username/.envs/env3.11/bin/python -m pip install --prefer-binary 'awscrt>=0.12.4,<0.17.0'

configure: error: "Python dependencies not met."
```

------
#### [ Windows PowerShell ]

```
PS C:\> C:\msys64\usr\bin\bash -lc "./configure" 
checking for a Python interpreter with version >= 3.8... python
checking for python... /Users/username/.envs/env3.11/bin/python
checking for python version... 3.11
checking for python platform... darwin
checking for GNU default python prefix... ${prefix}
checking for GNU default python exec_prefix... ${exec_prefix}
checking for python script directory (pythondir)... ${PYTHON_PREFIX}/lib/python3.11/site-packages
checking for python extension module directory (pyexecdir)... ${PYTHON_EXEC_PREFIX}/lib/python3.11/site-packages
checking for --with-install-type... system-sandbox
checking for --with-download-deps... Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/Users/username/aws-code/aws-cli/./backends/build_system/__main__.py", line 125, in <module>
    main()
  File "/Users/username/aws-code/aws-cli/./backends/build_system/__main__.py", line 121, in main
    parsed_args.func(parsed_args)
  File "/Users/username/aws-code/aws-cli/./backends/build_system/__main__.py", line 49, in validate
    validate_env(parsed_args.artifact)
  File "/Users/username/aws-code/aws-cli/./backends/build_system/validate_env.py", line 68, in validate_env
    raise UnmetDependenciesException(unmet_deps, in_venv)
validate_env.UnmetDependenciesException: Environment requires following Python dependencies:

awscrt (required: ('>=0.12.4', '<0.17.0')) (version installed: None)

We recommend using --with-download-deps flag to automatically create a virtualenv and download the dependencies.

If you want to manage the dependencies yourself instead, run the following pip command:
/Users/username/.envs/env3.11/bin/python -m pip install --prefer-binary 'awscrt>=0.12.4,<0.17.0'

configure: error: "Python dependencies not met."
```

------

要自动安装所需的 Python 依赖项，请使用 `--with-download-deps` 选项。使用此标志时，构建过程会执行以下操作：
+ 跳过 Python 库依赖项检查。
+ 将设置配置为下载所有必需的 Python 依赖项，并在 `make` 构建期间**仅**使用下载的依赖项构建 AWS CLI。

以下配置命令示例使用 `--with-download-deps` 选项下载和使用 Python 依赖项：

------
#### [ Linux and macOS ]

```
$ ./configure --with-download-deps
```

------
#### [ Windows PowerShell ]

```
PS C:\> C:\msys64\usr\bin\bash -lc "./configure --with-download-deps"
```

------

### 安装类型
<a name="source-getting-started-install-config-type"></a>

源代码安装过程支持以下安装类型：
+ `system-sandbox` - **（默认）**创建隔离的 Python 虚拟环境，将 AWS CLI 安装到虚拟环境中，并符号链接到虚拟环境中的 `aws` 和 `aws_completer` 可执行文件。AWS CLI 的这一安装直接依赖于为其运行时选择的 Python 解释器。

  这是一种轻量级的安装机制，用于在系统上安装 AWS CLI，并通过在虚拟环境中对安装进行沙箱化以遵循最佳 Python 实践。此安装适用于希望以尽可能顺畅的方式从源代码安装 AWS CLI 的客户（该安装与您的 Python 安装耦合）。
+ `portable-exe` - 将 AWS CLI 冻结为可分发到类似架构环境的独立可执行文件。这与生成 AWS CLI 的官方预构建可执行文件的过程相同。`portable-exe` 冻结在 `configure` 步骤中选择的 Python 解释器的副本中，以用于 AWS CLI 的运行时。这允许将其移到其他可能没有 Python 解释器的计算机上。

  这种类型的构建很有用，因为您可以确保您的 AWS CLI 安装未与环境中安装的 Python 版本耦合，并且可以将构建版本分发给可能尚未安装 Python 的其他系统。这使您能够控制所使用的 AWS CLI 可执行文件的依赖项和安全性。

要配置安装类型，请使用 `--with-install-type` 选项并指定 `portable-exe` 或 `system-sandbox` 的值。

以下 `./configure` 命令示例指定 `portable-exe` 的值：

------
#### [ Linux and macOS ]

```
$ ./configure --with-install-type=portable-exe
```

------
#### [ Windows PowerShell ]

```
PS C:\> C:\msys64\usr\bin\bash -lc "./configure --with-install-type=portable-exe"
```

------

## 步骤 3：构建 AWS CLI
<a name="source-getting-started-install-build"></a>

使用 `make` 命令通过您的配置设置构建 AWS CLI：

------
#### [ Linux and macOS ]

```
$ make
```

------
#### [ Windows PowerShell ]

```
PS C:\> C:\msys64\usr\bin\bash -lc "make"
```

------

**注意**  
使用 Python [https://docs.python.org/3/library/venv.html](https://docs.python.org/3/library/venv.html) 模块在构建目录中创建虚拟环境。虚拟环境是使用 [Python 标准库中提供的 pip 版本](https://docs.python.org/3/library/ensurepip.html)引导的。
复制 Python 库依赖项。根据是否在 `configure` 命令中指定了 `--with-download-deps` 标志，此步骤将执行以下操作之一：  
指定了 `--with-download-deps`****。Python 依赖项是 pip 安装的。这包括 `wheel`、`setuptools` 和所有 AWS CLI 运行时依赖项。如果您正在构建 `portable-exe`，则安装 `pyinstaller`。这些要求都是在通过 [https://github.com/jazzband/pip-tools](https://github.com/jazzband/pip-tools) 生成的锁定文件中指定的。
**未**指定 `--with-download-deps`。来自 Python 解释器的站点包中的 Python 库以及任何脚本（例如 `pyinstaller`）都被复制到用于构建的虚拟环境中。
直接在 AWS CLI 代码库上运行 `pip install`，以进行离线的树内构建，然后将 AWS CLI 安装到构建虚拟环境中。此安装使用 pip 标志 [--no-build-isolation](https://pip.pypa.io/en/stable/cli/pip_install/#cmdoption-no-build-isolation)、[--use-feature=in-tree-build](https://pip.pypa.io/en/stable/cli/pip_install/#local-project-installs)、[--no-cache-dir](https://pip.pypa.io/en/stable/cli/pip_install/#caching) 和 [https://pip.pypa.io/en/stable/cli/pip_install/#cmdoption-no-index](https://pip.pypa.io/en/stable/cli/pip_install/#cmdoption-no-index)。
**（可选）**如果在 `configure` 命令中将 `--install-type` 设置为 `portable-exe`，则使用 [https://www.pyinstaller.org/](https://www.pyinstaller.org/) 生成独立的可执行文件。

## 步骤 4：安装 AWS CLI
<a name="source-getting-started-install-instructions"></a>

`make install` 命令将您构建的 AWS CLI 安装到系统上所配置的位置。

------
#### [ Linux and macOS ]

以下命令示例使用您的配置和构建设置安装 AWS CLI：

```
$ make install
```

------
#### [ Windows PowerShell ]

以下命令示例使用您的配置和构建设置安装 AWS CLI，然后添加一个包含 AWS CLI 的路径的环境变量：

```
PS C:\> C:\msys64\usr\bin\bash -lc " make install "
PS C:\> $Env:PATH +=";C:\Program Files\AWSCLI\bin\"
```

------

`make install` 规则支持 [https://www.gnu.org/software/make/manual/html_node/DESTDIR.html#DESTDIR](https://www.gnu.org/software/make/manual/html_node/DESTDIR.html#DESTDIR) 变量。指定后，此变量会在安装 AWS CLI 时将指定的路径作为已配置的安装路径的前缀。默认情况下，未为该变量设置任何值。

------
#### [ Linux and macOS ]

以下代码示例使用 `--prefix=/usr/local` 标志来配置安装位置，然后对 `make install` 命令使用 `DESTDIR=/tmp/stage` 来更改该目的地。这些命令会导致 AWS CLI 安装在 `/tmp/stage/usr/local/lib/aws-cli` 中，而其可执行文件位于 `/tmp/stage/usr/local/bin` 中。

```
$ ./configure --prefix=/usr/local
$ make
$ make DESTDIR=/tmp/stage install
```

------
#### [ Windows PowerShell ]

以下代码示例使用 `--prefix=\awscli` 标志来配置安装位置，然后对 `make install` 命令使用 `DESTDIR=C:\Program Files` 来更改该目的地。这些命令会导致 AWS CLI 安装在 `C:\Program Files\awscli` 中。

```
$ ./configure --prefix=\awscli
$ make
$ make DESTDIR='C:\Program Files' install
```

------

**注意**  
将以下内容之一移至配置的安装目录：  
如果安装类型为 `system-sandbox`，则移动您构建的虚拟环境。
如果安装类型为 `portable-exe`，则移动已构建的独立可执行文件。
在配置的 bin 目录中为 `aws` 和 `aws_completer` 可执行文件创建符号链接。

## 步骤 5：验证 AWS CLI 安装
<a name="source-getting-started-install-verify"></a>

使用以下命令确认成功安装了 AWS CLI：

```
$ aws --version
aws-cli/2.27.41 Python/3.11.6 Windows/10 exe/AMD64 prompt/off
```

如果无法识别 `aws` 命令，您可能需要重启终端以更新新的符号链接。如果您在安装或卸载 AWS CLI 后遇到其他问题，请参阅 [排查 AWS CLI 错误](cli-chap-troubleshooting.md) 以了解常用故障排除步骤

## 工作流程示例
<a name="source-getting-started-install-workflows"></a>

本节提供了一些从源代码安装的基本工作流示例。

### 基本 Linux 和 macOS 安装
<a name="source-getting-started-install-workflows-basic"></a>

以下示例是一个基本的安装工作流，其中 AWS CLI 安装在默认的 `/usr/local/lib/aws-cli` 位置。

```
$ cd path/to/cli/respository/
$ ./configure
$ make
$ make install
```

### 自动 Windows 安装
<a name="source-getting-started-install-workflows-win"></a>

**注意**  
您必须以管理员身份运行 PowerShell 才能使用此工作流。

MSYS2 可以在 CI 设置中自动使用，请参阅《MSYS2 文档》**中的[在 CI 中使用 MSYS2](https://www.msys2.org/docs/ci/)。

------
#### [ Downloaded Tarball ]

下载 `awscli.tar.gz` 文件，解压缩，然后安装 AWS CLI。使用以下命令时，请替换以下路径：
+ `C:\msys64\usr\bin\bash`（包括 MSYS2 路径的位置）。
+ `.\awscli-2.x.x\`（包括解压缩的 `awscli.tar.gz` 文件夹名称）。
+ `PYTHON='C:\path\to\python.exe'`（包括本地 Python 路径）。

以下代码示例使用 MSYS2 自动从 PowerShell 构建和安装 AWS CLI，并指定要使用哪个 Python 本地安装：

```
PS C:\> curl "https://awscli.amazonaws.com/awscli.tar.gz" -o "awscliv2.zip"  #  Download the awscli.tar.gz file in the current working directory
PS C:\> tar -xvzf .\awscli.tar.gz #  Extract awscli.tar.gz file
PS C:\> cd .\awscli-2.x.x\ #  Navigate to the root of the extracted files
PS C:\> $env:CHERE_INVOKING = 'yes' #  Preserve the current working directory
PS C:\> C:\msys64\usr\bin\bash  -lc " PYTHON='C:\path\to\python.exe' ./configure --prefix='C:\Program Files\AWSCLI' --with-download-deps " 
PS C:\> C:\msys64\usr\bin\bash  -lc "make"
PS C:\> C:\msys64\usr\bin\bash  -lc "make install"
PS C:\> $Env:PATH +=";C:\Program Files\AWSCLI\bin\"
PS C:\> aws --version
aws-cli/2.27.41 Python/3.11.6 Windows/10 source-sandbox/AMD64
```

------
#### [ GitHub Repository ]

下载 `awscli.tar.gz` 文件，解压缩，然后安装 AWS CLI。使用以下命令时，请替换以下路径：
+ `C:\msys64\usr\bin\bash`（包括 MSYS2 路径的位置）。
+ `C:path\to\cli\repository\`（包括指向 *GitHub* 中克隆的 [AWS CLI 存储库](https://github.com/aws/aws-cli)的路径）。有关更多信息，请参阅《GitHub 文档》**中的[分流存储库](https://docs.github.com/en/get-started/quickstart/fork-a-repo)。
+ `PYTHON='C:\path\to\python.exe'`（包括本地 Python 路径）。

以下代码示例使用 MSYS2 自动从 PowerShell 构建和安装 AWS CLI，并指定要使用哪个 Python 本地安装：

```
PS C:\> cd C:path\to\cli\repository\
PS C:\> $env:CHERE_INVOKING = 'yes' #  Preserve the current working directory
PS C:\> C:\msys64\usr\bin\bash  -lc " PYTHON='C:\path\to\python.exe' ./configure --prefix='C:\Program Files\AWSCLI' --with-download-deps " 
PS C:\> C:\msys64\usr\bin\bash  -lc "make"
PS C:\> C:\msys64\usr\bin\bash  -lc "make install"
PS C:\> $Env:PATH +=";C:\Program Files\AWSCLI\bin\"
PS C:\> aws --version
```

------

### Alpine Linux 容器
<a name="source-getting-started-install-workflows-alpine"></a>

下面是一个 Dockerfile 示例，可作为 [Alpine 预构建二进制文件的替代](https://github.com/aws/aws-cli/issues/4685)，用于在 Alpine Linux 容器中正常安装 AWS CLI：使用此示例时，将 *AWSCLI\$1VERSION* 替换为所需的 AWS CLI 版本号：

```
 1. FROM python:3.8-alpine AS builder
 2. 
 3. ENV AWSCLI_VERSION=2.10.1
 4. 
 5. RUN apk add --no-cache \
 6.     curl \
 7.     make \
 8.     cmake \
 9.     gcc \
10.     g++ \
11.     libc-dev \
12.     libffi-dev \
13.     openssl-dev \
14.     && curl https://awscli.amazonaws.com/awscli-${AWSCLI_VERSION}.tar.gz | tar -xz \
15.     && cd awscli-${AWSCLI_VERSION} \
16.     && ./configure --prefix=/opt/aws-cli/ --with-download-deps \
17.     && make \
18.     && make install
19. 
20. FROM python:3.8-alpine
21. 
22. RUN apk --no-cache add groff
23. 
24. COPY --from=builder /opt/aws-cli/ /opt/aws-cli/
25. 
26. ENTRYPOINT ["/opt/aws-cli/bin/aws"]
```

构建此映像并从与 Amazon Linux 2 上构建的容器类似的容器调用 AWS CLI：

```
$ docker build --tag awscli-alpine .
$ docker run --rm -it awscli-alpine --version
aws-cli/2.2.1 Python/3.8.11 Linux/5.10.25-linuxkit source-sandbox/x86_64.alpine.3 prompt/off
```

此映像的最终大小小于官方 AWS CLI Docker 映像的大小。有关官方 Docker 映像的信息，请参阅 [在 AWS CLI 中运行官方 Amazon ECR Public 映像或 Docker 映像](getting-started-docker.md)。

## AWS CLI 安装和卸载错误故障排除
<a name="source-install-tshoot"></a>

有关安装错误的故障排除步骤，请参阅 [排查 AWS CLI 错误](cli-chap-troubleshooting.md) 以了解常见故障排除步骤。有关相关性最高的故障排除步骤，请参阅[找不到命令错误](cli-chap-troubleshooting.md#tshoot-install-not-found)、[“`aws --version`”命令返回的版本与您安装的版本不同](cli-chap-troubleshooting.md#tshoot-install-wrong-version)和[卸载 AWS CLI 后，“`aws --version`”命令返回一个版本](cli-chap-troubleshooting.md#tshoot-uninstall-1)。

对于故障排除指南中未涵盖的任何问题，请在 *GitHub* 的 [AWS CLI 存储库](https://github.com/aws/aws-cli/labels/source-distribution)中搜索带有 `source-distribution` 标签的问题。如果现有问题没有涵盖您的错误，请[创建一个新问题](https://github.com/aws/aws-cli/issues/new?assignees=&labels=source-distribution%2Cneeds-triage&template=source-distribution.yml&title=%28short+issue+description%29)以获得 AWS CLI 维护者的帮助。

## 后续步骤
<a name="source-install-next-steps"></a>

安装 AWS CLI 后，应执行 [设置 AWS CLI](getting-started-quickstart.md)。