Dependency and Environment Management in Python

People have a lot of opinions about dependency and environment management in Python.

Python's been having a moment recently, as more tools are coming out to address problems people have had with pip and virtualenv.

I'm not going to add my own two cents. This is more of a survey of what I've found and read.

Here's a two-part analysis from early 2019 of Pipenv and Poetry, looking at speed and user experience (in the author's term, "Ergonomics").

In late 2020, Jan Giacomelli did a writeup on the state of dependency and environment management. I won't copy/paste it, but check out the table 2/3rds of the way down that post -- it's a helpful reference to determine what does what.

Then, in early 2021, Frost Ming wrote a couple of pieces on Python Development Master, or PDM, which they've written to capture the vision set out in PEP 582. First, read "You don't really need a virtualenv" which outlines some of the issues with virtual environments that PDM set out to solve. Next, read "A Review: Pipenv vs. Poetry vs. PDM" which is PDM-biased (not surprising, given the author). However, Frost Ming claims in the earlier piece to be a maintainer/contributor to pipenv, so they certainly speak from a position of experience.

After I posted one of the above in a work Slack channel, Anders replied with a talk from PyConUS 2021, in which Jeremy Paige talks about the history and state of Python packaging.

What I'm doing

I used to use venv + pip (technically virtualenv but that was before venv shipped with Python), and have recently adopted pyenv and Poetry. I'll stick with those for a while until I get a chance to play around with PDM.