This PEP proposes a new file format for specifying dependencies to enable reproducible installation in a Python environment. The format is designed to be human-readable and machine-generated. Installers consuming the file should be able to calculate wha...
Setuptools supports using setup.py and pyproject.toml simultaneously. This PR moves most of the static project metadata to pyproject.toml. Diff for .dist-info/METADATA Metadata-Version: 2.1 Name:...
Since people seemed to like my June 2023 post on the state of WASI support for CPython, I thought I would do one for another one of my other long-gestating projects: coming up with a standardized lock file format for Python packaging. 💡When I say "lock file" I'm talking about
The pyproject.toml file | Documentation | PoetryAuthors
The pyproject.toml file In package mode, the only required fields are name and version (either in the project section or in the tool.poetry section). Other fields are optional. In non-package mode, the name and version fields are required if using the project section. Note Run poetry check to print warnings about deprecated fields. The project section The project section of the pyproject.toml file according to the specification of the PyPA. name The name of the package. Always required when the project section is specified
Requires-Python upper limits Requires-Python was added to allow older versions of Python to be dropped by packages without breaking installation on older versions of Python. Currently (and for the last 4+ years), pip handles this quite simply; Requires-Python is a free-form SpecifierSet, and it checks to see if the current version of Python is included in the set. If not, it starts going back through a package’s history to find the most recent passing version. This was prompted by IPython droppi...
(This is the blog post version of my keynote from EuroPython 2025 in Prague, Czechia.) We now have a lock file format specification. That might not sound like a big deal, but for me it took 4 years of active work to get us that specification. Part education, part therapy,
Last time, we built a hybrid concurrent.futures executor using inheritance. Today, we're building it again (twice!) using composition and functions only, to figure out which way is better and why. Consider this a worked example.
Pip 25.0 has been out for a bit over a month now; and we now also have an official blog post about the release, as well as a 25.0.1 patch for a regression. Pip 25.0 has what I consider a very serious