Closed jpmckinney closed 1 year ago
Update: pyproject.toml is no longer experimental, but some features are still beta.
One-time setup:
pip install setuptools-py2cfg
Run:
setuptools-py2cfg -a | sed /long_description_content_type/d >> setup.cfg
sed -i '' '/^dist/i\
/build' .gitignore
sed -i '' 's/cache-dependency-path: setup.py/cache-dependency-path: setup.cfg/' .github/workflows/{ci,lint}.yml
sed -i '' 's/ setuptools//' .github/workflows/lint.yml
if [ -f pyproject.toml ]
sed -i '' '1i \
[build-system]\
requires = ["setuptools>=61.2"]\
build-backend = "setuptools.build_meta"\
\
' pyproject.toml
else
echo '[build-system]
requires = ["setuptools>=61.2"]
build-backend = "setuptools.build_meta"' > pyproject.toml
end
git apply ../setup-patch
git rm setup.py
git add pyproject.toml setup.cfg
Then:
git diff HEAD
where setup-patch is:
diff --git a/.github/workflows/pypi.yml b/.github/workflows/pypi.yml
index 9301126..780ff22 100644
--- a/.github/workflows/pypi.yml
+++ b/.github/workflows/pypi.yml
@@ -8,8 +8,8 @@ jobs:
- uses: actions/setup-python@v4
with:
python-version: 3.8
- - run: pip install --upgrade setuptools wheel
- - run: python setup.py sdist bdist_wheel
+ - run: pip install --upgrade build
+ - run: python -m build --sdist --wheel
- name: Publish to TestPyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
This yields a setup.cfg
file that can be used right away.
Then check occurrences across all files:
setup.py\b|(?<!(?:\n# pip| file:)\n# )setuptools(?!>=61\.2|\.build_meta)|(?<!--)wheel\b(?!==)
For TOML
pip install ini2toml
sed -i "" 's/packages=.*//' setup.cfg | ini2toml -p setup.cfg -
This yields a decent first conversion to a pyproject.toml file. Can tidy:
authors = [{name = "Open Contracting Partnership", email = "data@open-contracting.org"}]
readme = { file = "README.rst"}
(content-type
seems to not be required)include-package-data = false
can be removedStill need to:
long_description
Closing as transitioned to setup.cfg, which protects us from future deprecations.
See https://setuptools.pypa.io/en/latest/userguide/quickstart.html
It is important to remember, however, that running this file as a script (e.g. python setup.py sdist) is strongly discouraged, and that the majority of the command line interfaces are (or will be) deprecated (e.g. python setup.py install, python setup.py bdist_wininst, …).
We also recommend users to expose as much as possible configuration in a more declarative way via the pyproject.toml or setup.cfg, and keep the setup.py minimal with only the dynamic parts (or even omit it completely if applicable).
We use build to replace python setup.py sdist wheel
.
We still use setuptools for metadata. We could change to flit, which would require changing the build-system
and some options like install_requires
to dependencies
, etc. However, we've already solved the problems that flit addresses (ensuring data files are included, versions are correctly set, etc.) through documentation, templates, CI, etc. Flit's metadata format seems to be unstable. Setuptools remains the de-facto standard.
For setuptools, TOML features in beta are:
Now transitioned to pyproject.toml using ini2toml and light editing.
To find setup.py or setup.cfg:
find . \( -name setup.py -o -name setup.cfg \) -maxdepth 2 | sort
https://setuptools.pypa.io/en/latest/userguide/quickstart.html#transitioning-from-setup-py-to-setup-cfg
setuptools' pyproject.toml support is still experimental.