So last night Shaken Fist CI jobs started failing with errors like this (editted lightly for clarity):
Building wheels for collected packages: shakenfist-ci
Building wheel for shakenfist-ci (setup.py): started
Building wheel for shakenfist-ci (setup.py): finished with status 'error'
error: subprocess-exited-with-error
× python setup.py bdist_wheel did not run successfully.
│ exit code: 1
╰─> [86 lines of output]
...
...setuptools/command/install.py:37: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
setuptools.SetuptoolsDeprecationWarning,
installing to build/bdist.linux-x86_64/wheel
running install
...
warning: install_lib: byte-compiling is disabled, skipping.
running install_egg_info
Copying shakenfist_ci.egg-info to build/bdist.linux-x86_64/wheel/shakenfist_ci-0.0.1.dev2544-py3.7.egg-info
running install_scripts
error: invalid command 'bdist_wininst'
[end of output]
This was pretty concerning. I know that a setup.py / setup.cfg style install is a little old school, but it was unexpected that it broke entirely. At first I thought I’d have to convert to poetry to unblock this, but Chet helpfully pointed out that this is as simple as adding a pyproject.toml file to the directory which contains your setup.py and setup.cfg. The basic issue is that a modern pip doesn’t assume that you’re going to use setuptools, so you need to tell it that you’re doing that in pyproject.toml. Then you’re unblocked.
So, just create a file named pyproject.toml in the setup.py / setup.cfg directory which contains this:
[build-system]
requires = ["setuptools >= 40.6.0", "wheel"]
build-backend = "setuptools.build_meta"
And you’re good to go. If you’re really curious, this page was quite helpful in working out what was happening.