CLI tool
aws/aws-cli avatar
aws/aws-cli

aws/aws-cli: the Python source behind the AWS command line, and where its packaging trips people up

Universal Command Line Interface for Amazon Web Services

17,364 stars4,764 forksPythonNOASSERTION

At a glance

What is it?
aws/aws-cli is the Python codebase for Amazon's unified command line interface. The binary v2 installers are the easy path; building from the develop branch brings a Python floor that disagrees with the README, tight dependency ceilings, and a release history that lives in a changelog rather than on GitHub.
Who is it for?
Install AWS CLI v2 from the macOS pkg, Windows MSI or Linux zip installers if you just need the aws command; that path avoids the Python packaging questions entirely. Clone aws/aws-cli and build from setup.py only if you need to read or patch the source, and then use a dedicated virtual environment on Python 3.10 or later.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 14, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • aws/aws-cli17,364 ★ · +94
Star history
Repository2026-09-212026-11-14
aws/aws-cli17.3k17.4k

94 Stars in the last 54 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

The develop branch builds a pip package while v2 ships as native installers

The repository's default branch is develop, and its setup.py builds a package named awscli with the description Universal Command Line Environment for AWS. It installs five scripts from bin/: aws, aws.cmd, aws_completer, aws_zsh_completer.sh and aws_bash_completer. That is the code path for anyone working from source.

Most users never touch it. AWS CLI v2 is distributed as a macOS pkg installer (AWSCLIV2.pkg), a Windows MSI (AWSCLIV2.msi), and Linux executable installers for x86-64 and arm64 (aarch64) as zip files on awscli.amazonaws.com. If you want the v2 development branch rather than an installer, the README points to a separate CLI Dev Version section. Choosing the installer gets you a self-contained aws command; choosing pip from this branch makes the CLI one more Python package competing with everything else in that environment.

Python 3.9 in the README, 3.10 in setup.py

The README lists supported Python versions as 3.9.x through 3.14.x. The setup.py on the same branch says python_requires=">= 3.10", and the ruff configuration in pyproject.toml sets target-version = "py310". Those do not agree.

The practical consequence: on a Python 3.9 interpreter, pip will refuse to install the package from this source, regardless of what the README table says. Trust setup.py here, because that is what pip enforces. Teams still pinned to 3.9 on build agents should use the v2 installers instead of a pip install from source.

Dependency ceilings that collide in a shared environment

The install_requires list in setup.py caps several common libraries: docutils>=0.18.1,<=0.19, PyYAML>=3.10,<6.1, colorama>=0.2.5,<0.4.7, rsa>=3.1.2,<4.8, jmespath>=0.7.1,<2.0.0, python-dateutil>=2.1,<3.0.0, and urllib3>=1.25.4,!=2.2.0,<3. The optional crt extra pins awscrt==0.36.0 exactly.

Upper bounds like docutils <=0.19 and rsa <4.8 are where trouble starts. If another tool in the same virtual environment needs a newer docutils or rsa, pip cannot satisfy both, and one of them will be downgraded or the install will fail. Install this package in its own environment, or use the v2 installers, rather than adding it to an application's dependency set.

Credentials resolve from four places, and the config file wants a profile prefix

aws-cli reads credentials from environment variables, the shared credentials file, the config file, or an IAM Role. The fastest start is aws configure, which prompts for the access key ID, secret key, default region and default output format. Environment variables work too:

code
$ export AWS_ACCESS_KEY_ID=<access_key>
$ export AWS_SECRET_ACCESS_KEY=<secret_key>

The shared credentials file lives at ~/.aws/credentials and the config file at ~/.aws/config, with %UserProfile% equivalents on Windows. AWS_SHARED_CREDENTIALS_FILE and AWS_CONFIG_FILE move them elsewhere. The trap is a formatting asymmetry: in the credentials file a profile section is [testing], but in the config file every profile except default must be written [profile testing]. Copy a section between the two files without changing the header and the CLI will not find that profile. Select profiles with --profile or AWS_PROFILE; without either, default is used. On EC2, an IAM Role is picked up automatically.

Tab completion is not installed for you

Command completion ships with the package but is not set up automatically. For bash, the built-in complete command registers it:

code
$ complete -C aws_completer aws

Alternatively, drop bin/aws_bash_completer into /etc/bash_completion.d, /usr/local/etc/bash_completion.d or another bash_completion.d directory. zsh needs bashcompinit and compinit loaded first:

code
$ autoload bashcompinit && bashcompinit
$ autoload -Uz compinit && compinit
$ complete -C '/usr/local/bin/aws_completer' aws

The path /usr/local/bin/aws_completer is an assumption; replace it with the output of which aws_completer if yours differs, which it will when the CLI lives in a virtual environment. None of this persists until you add it to ~/.zshrc or your shell startup files, so a new terminal without that step has no completion.

Releases are tracked in CHANGELOG.rst, not on GitHub Releases

The only entry on the repository's GitHub releases page is 2.0.0dev0, an AWS CLI 2.0.0dev preview published on 2018-11-26. Release notes instead live in CHANGELOG.rst on the v2 branch, and the repository also carries a .changes/ directory alongside CHANGELOG.rst at the top level. Anyone watching GitHub releases for update notifications will see nothing new; watch the changelog instead. The develop branch received its last push on 2026-11-02, so the code itself is moving even though the releases page is frozen.

macOS 10.15 lost support on 2024-11-13

Support for macOS 10.15 was dropped on 2024-11-13. Users on macOS 10.15 or earlier who want up-to-date AWS CLI v2 builds need to move to macOS 11 or later. A machine that cannot upgrade is stuck on whatever older CLI version it already has, which matters because the README also asks every user to monitor the Amazon Web Services Security Bulletins website for aws-cli issues. Fixes announced there will not reach an unsupported OS.

Editorial conclusion

Install AWS CLI v2 from the macOS pkg, Windows MSI or Linux zip installers if you just need the aws command; that path avoids the Python packaging questions entirely. Clone aws/aws-cli and build from setup.py only if you need to read or patch the source, and then use a dedicated virtual environment on Python 3.10 or later. Before relying on either, check the CHANGELOG.rst on the v2 branch and confirm your OS is still supported, since macOS 10.15 was dropped on 2024-11-13.

Frequently asked questions

What is the AWS CLI used for, according to aws/aws-cli?

aws/aws-cli provides a unified command line interface to Amazon Web Services, run through the aws command after you configure credentials.

How to configure the AWS CLI from aws/aws-cli?

Run aws configure and enter your access key ID, secret access key, default region and output format. You can also use environment variables, ~/.aws/credentials, ~/.aws/config, or an IAM Role on EC2.

How to install the AWS CLI on Mac?

AWS CLI v2 ships as a macOS pkg installer, AWSCLIV2.pkg, from awscli.amazonaws.com. macOS 10.15 support was dropped on 2024-11-13, so macOS 11 or later is needed for current versions.

How to use an AWS CLI profile?

Define profiles in ~/.aws/credentials as [name] and in ~/.aws/config as [profile name], then pick one with --profile or AWS_PROFILE. Without either, the default profile is used.

Official sources

  1. aws/aws-cli on GitHub
  2. Issues
  3. README
  4. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/aws-aws-cli.svg)](https://hysenlabs.com/projects/aws-aws-cli)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/aws-aws-cli.svg)](https://hysenlabs.com/projects/aws-aws-cli)

Was this useful?