Just in case you tl;dr

"A summary of our lessons along the way:

1. Language does not define packaging, environment does. Python is general-purpose, PyPI is not.

2. Application packaging must not be confused with library packaging. Python is for both, but pip is for libraries.

3. Self-contained artifacts are the key to repeatable deploys. Containment is a spectrum, from executable to installer to userspace image to virtual machine image to hardware.

4. "Containers" are not just one thing, let alone the only option."

> pip is for libraries

Since when?

pip & similar package managers are a trainwreck everywhere but on developer machines.

Huh. I'm not originally from the python community, but I had no trouble figuring out how to get reproducible installs out of pip using the requirements.txt idiom.

That great! The PyPA works hard to make pip+pypi behave intuitively. That said, a lot of more applications need more machinery, yielding utilities like pip-tools[0] and conda.

[0]: https://github.com/jazzband/pip-tools