Adopt PEP 517 tooling for Python packages
- Date proposed: 2022-02-19
- RFC MR: https://gitlab.archlinux.org/archlinux/rfcs/-/merge_requests/0010
Summary
Replace setup.py with PEP 517 tooling (python-build/python-installer) for all Python packages where this approach is viable.
Motivation
There are two main points.
- Direct setup.py calls are deprecated
The setuptools upstream has deprecated direct setup.py calls, and plans to remove support for them in the future. Please see setuptools #2088 and setuptools #2080 for more context.
- setup.py install calls install old-style Python metadata
The metadata installed by setup.py install is the old-style "egg" format (.egg-info). Is is essentially implementation-defined by setuptools and has been replaced by a standardized format (.dist-info). By moving to the PEP 517 tooling, we will be using the wheel format, which has the standardized metadata.
Specification
The change consists of replacing setup.py invocations with the python-build and python-installer tools.
Essentially replacing
python setup.py build python setup.py install --root="$pkgdir" --optimize=1
with
python -m build --wheel --no-isolation python -m installer --destdir="$pkgdir" dist/*.whl
You can find more information in the Python packaging guidelines.
This would naturally only serve as a general guideline, packages that need an alternative approach can still do so, but are recommended to stay as close as the guidelines as reasonably possible.
Drawbacks
This change affects a big number of packages, so it will require some work per part of the maintainers, but it can be done incrementally as packages are updated.
Unresolved Questions
None, I think.
Alternatives Considered
I don't think there is currently any viable alternative solution for the issues presented.