“We do not plan to publish the AWS CLI project to PyPI at this time”
github.com
github.com
- Lots of people don't have a choice if they want to use AWS, someone in the business decided it for them
- AWS is not some non-profit open source pet project but actively tries to pull as many devs and companies as possible into their ecosystem
- Breaking users' workflows is always going to cause issues. AWS CLI v1 was distributed on pypi, lots of people had already built workflows around that.
- It is my understanding that for some people / use cases (e.g. using pyenv), having aws cli being tied to the system python causes significant issues for some reason (I can't remember exactly why, but a coworker struggled with this for days). It might have something to do with the PYTHONPATH, not sure.
- The whole response from Amazon reads as "we know what's best for you" and frankly, I find that kind of attitude (which seems to be increasing among big corps) infuriating. Large tech companies already have way too much control over the ways we build software, it would be nice if they didn't also control our workflows.
Full agreement that many people in that GitHub issue were not being constructive and behaving childishly, but I still believe that Amazon deserves criticism here.
Frankly it's good to see devs not ceding to the internet rage mob. I remember before aws hired the main guy behind boto and I had to install 10 different tar.gz tools from 10 different aws teams and install all of them and setup 20 different env variables.
Running their installer isn't difficult and I've included it in our docker and ami builds easily. If you want a fixed version, download whatever from their repo and mirror it to your internal storage and you can always install from there and ensure you're running the exact version you like.
This response (from a year ago) seems perfectly reasonable and explains in detail a good number of reasons why they aren't using pip: https://github.com/aws/aws-cli/issues/4947#issuecomment-5860...
I'm curious why they even chose python to implement this — maybe it's sufficiently close to v1 of the tool?
and as one of the commenters on the bug mentions, if you really want to install the aws cli through pip, that works because pip will happily install the git repo url.
just because a customer wants something, doesn't mean it's a reasonable request. i'm sure there are plenty of people who would also like to install the official aws-cli through cargo, gem, or npm.
Microsoft: Prioritize what users demand. This leads to massive spaghetti systems which become unmaintainable in the long term.
Amazon: Talk to users, and do what users need. This seems to do okay.
Google: Do what developers think is right for users, having never interacted with a user, and convinced of the intrinsic superiority of Googlers.
The Google approach does okay for B2C, but doesn't work for B2B. The Microsoft and Amazon approaches do well in different niches.
Heck, there's people on the thread offering them build scripts that will create debs and rpms for them. It isn't that hard to do.
I can understand why they don't give a crap, though. The people responsible for setting up recipes to build and deploy a few thousand servers with AWS tooling on them that would sure like to be able to automate updates of the packages aren't the ones forcing their companies to use AWS, so Amazon prioritizes meeting the needs of the people making purchasing decisions rather than the people who actually have to use the tooling. With enough vendor lock-in and long term contracts already signed, they don't need to care about improving user experience to come up to par with system maintainer expectations from the early 90s.
- [taken from the GitHub thread]
I understand where the poster is coming from but I think it’s hard to overstate the reach and compatibility needs of the AWS CLI. Also, of course, times change and Python man be supplanted by another scripting language.
Anyway, I think the AWS team is making the right call though I am a big package manager fan.
Maybe they’ll rewrite to Rust one day, but maintain interface parity.
Anyway, i can just
pipx install git+https://github.com/aws/aws-cli@2.2.24
and keep moving. Whatever. pipx install https://github.com/aws/aws-cli/archive/refs/tags/2.2.24.zip
which can often be a lot faster.Every time I've done that, everything ends in disaster.
Just pip install the virtualenv and boom, cli tools in, for everyone.
The writing style here just oozes AWS manager. This was probably ripped straight out of a business report. Its not surprising that this manager has posted only 1 update in May. https://github.com/aws/aws-cli/issues/6186 . The update ends with basically we fight fires first and dev second, there are always more fires, and we are hiring. Not so much of a status update as a plea for help.
> In the long term we want the fact that the AWS CLI is written in Python to be more of an implementation detail than a feature.
For Arch, there is a PKGBUILD for the AWS CLI v2 on AUR [1], which produces a package that can be installed, like any other, with the system package manager.
There seem to be some problems with packaging it for Fedora, but those issues look orthogonal to the decision not to publish on PyPI [2].
Can anyone give me one good reason a programming language should bother with dependency management?
Nix has the right idea, but the execution is spotty and poorly documented IMO. Not to mention they have a serious problem with package naming, which strikes me as a glaring issue.
A programming language with the ability to dispatch on version could be very interesting, and possibly allow for safer upgrades on a per function basis.
Still it feels like this should be part of an interface between a PL and some other set of packaging options. A convention for where to place libraries (with versions) like /lib is basically the solution. But I guess the various communities don't really want to get into a turf war, so maybe it's /lib/ruby and /lib/python in addition to the rest?
When a programming language tries to ignore dependency management, like Go and Python did for too long, an ecosystem will soon spring up of a bunch of informal third-party tools for managing dependencies, all of which are only partially compatible with each other. It works better when the designers of a programming language include dependency management in the design and promote one official way to do it, like C# or Rust.
(I say this even though in general I prefer Go and Python to C# and Rust - you have to respect what the different tools do better.)
Start standardizing language agnostic interface, thus fixing the compatibility issue and I only see this as a good thing.
Disclaimers: I work for AWS, but not on the AWS CLI; AppFS is my own personal project
Sounds about right. Nothing more to see here.