Setuptools 74+
This is a proposed Change for Fedora Linux.
This document represents a proposed Change. As part of the Changes process, proposals are publicly announced in order to receive community feedback. This proposal will only be implemented if approved by the Fedora Engineering Steering Committee.
Summary
Update to a new upstream release of python-setuptools
that is not completely compatible with previous releases. Most notably, version 72.0.0 removed support for the setup.py test
command (deprecated for 5 years). This is a breaking change and Fedora packages that use the setup.py test
command during the build need to be adapted to use a different test runner, such as unittest, pytest, etc. There might be other breaking changes. We estimate 142 to 196 Fedora Rawhide packages to fail to build due to this upgrade (as of Sep 2024).
Owner
- Name: Miro HronÄok
- Email: mhroncok@redhat.com
Detailed Description
Setuptools is a package development process library designed to facilitate packaging Python projects by enhancing the former Python standard library distutils (distribution utilities). It changes fast and it often introduces breaking changes such as the removal of the setup.py test
command in version 72.0.0 which was deprecated since 2019.
If your Fedora package still uses the setup.py test
command (deprecated for 5 years), please update to %pytest
, %tox
, %{python3} -m unittest
, etc.
List of packages that will likely fail to build, because they use the removed setup.py test
command in the specfile:
$ rg '^[^-#].+(\b|_)setup(\.py|\})\s+test\b' -l | sed -E 's|^rpm-specs/(.+)\.spec$|\1|' | sort
adapt
ansible-inventory-grapher
binwalk
btrfs-sxbackup
calibre
cepces
classification-banner
ddiskit
fprettify
fros
grammalecte
gtts
gtts-token
hddfancontrol
hgsvn
ioc-writer
isrcsubmit
kitty
lazygal
libvirt-test-API
mopidy
mopidy-mpd
nototools
past-time
petsc
pycairo
PyGreSQL
pyjokes
pyowm
python3-lxc
python3-mallard-ducktype
python-aioresponses
python-apsw
python-auth-credential
python-autopage
python-binaryornot
python-booleanoperations
python-bracex
python-can
python-case
python-casttube
python-cccolutils
python-chai
python-cliff
python-collada
python-colorclass
python-CommonMark
python-cpuinfo
python-cwcwidth
python-cx-oracle
python-decorator
python-dfdatetime
python-dictdiffer
python-digitalocean
python-dirq
python-distroinfo
python-django-contrib-comments
python-django-prometheus
python-dkimpy
python-enlighten
python-epub
python-events
python-fedmsg-meta-fedora-infrastructure
python-flask-wtf-decorators
python-flask-xml-rpc
python-flufl-i18n
python-fontMath
python-freeipa
python-gammu
python-genshi
python-genty
python-geojson
python-gerritlib
python-glyphsLib
python-gmqtt
python-hgapi
python-html5-parser
python-httpsig-cffi
python-hypothesis-fspaths
python-imagehash
python-ipgetter2
python-iptools
python-jack-client
python-jcconv
python-jinja2_pluralize
python-jinja2-time
python-journal-brief
python-json-minify
python-jsonpath-ng
python-jsonpath-rw
python-klusta
python-launchpadlib
python-lazr-uri
python-libusb1
python-lupa
python-markups
python-messaging
python-moksha-hub
python-murano-pkg-check
python-mutatormath
python-mwclient
python-neurosynth
python-num2words
python-oletools
python-openidc-client
python-oslo-context
python-oslo-metrics
python-os-service-types
python-ouimeaux
python-pdfkit
python-phonenumbers
python-poyo
python-pyasn1
python-pyclipper
python-pycryptodomex
python-pydispatcher
python-pyfim
python-pymediainfo
python-pyramid_sawing
python-pyramid-tm
python-pysignals
python-pysocks
python-pystray
python-pyte
python-pytest-fixture-config
python-pytest-flakes
python-pytest-runner
python-pytimeparse
python-repoze-lru
python-rmtest
python-rsd-lib
python-scripttest
python-serpy
python-shodan
python-simplegeneric
python-simplevisor
python-singledispatch
python-slacker
python-smartypants
python-sphinxcontrib-autoprogram
python-sphinxcontrib-trio
python-sql
python-ssdeep
python-statsd
python-svg-path
python-testscenarios
python-textile
python-textparser
python-tgscheduler
python-tidy
python-timeout-decorator
python-tosca-parser
python-translationstring
python-tree-format
python-typing-inspect
python-volatile
python-wadllib
python-whoosh
python-wsgi_intercept
python-www-authenticate
python-xmp-toolkit
python-xunitparser
python-yapsy
python-yaql
python-zc-customdoctests
python-zc-lockfile
python-zope-deprecation
python-zope-testing
python-zstd
sepolicy_analysis
tpm2-pkcs11
transifex-client
List of packages that actually failed in our testing copr but did not fail in a control copr:
ansible-inventory-grapher
btrfs-sxbackup
cepces
classification-banner
ddiskit
flent
fprettify
fros
gpgme
grammalecte
grpc
hddfancontrol
ioc-writer
lazygal
mopidy
mopidy-mpd
mozjs102
past-time
PyGreSQL
pyproject-rpm-macros
python3-lxc
python3-mallard-ducktype
python-aioresponses
python-binaryornot
python-bracex
python-case
python-cccolutils
python-chai
python-cliff
python-collada
python-colorclass
python-cpuinfo
python-cwcwidth
python-daemon
python-decorator
python-dfdatetime
python-digitalocean
python-distroinfo
python-django-contrib-comments
python-django-prometheus
python-epub
python-events
python-flake8-class-newline
python-flask-wtf-decorators
python-flask-xml-rpc
python-flufl-i18n
python-fontMath
python-freeipa
python-genshi
python-genty
python-geojson
python-hypothesis-fspaths
python-imagehash
python-iptools
python-jack-client
python-jcconv
python-jinja2_pluralize
python-jinja2-time
python-json-minify
python-jsonpath-ng
python-jsonpath-rw
python-jupyter-packaging
python-klusta
python-launchpadlib
python-lazr-uri
python-libusb1
python-lupa
python-markups
python-moksha-hub
python-mutatormath
python-mwclient
python-nose
python-oletools
python-openidc-client
python-oslo-context
python-oslo-metrics
python-ouimeaux
python-parsel
python-pdfkit
python-phonenumbers
python-poyo
python-pyasn1
python-pycdio
python-pyclipper
python-pydispatcher
python-pyemd
python-pygmtools
python-pymediainfo
python-pyproject-api
python-pyproject-hooks
python-pyramid_sawing
python-pyramid-tm
python-pysignals
python-pysrt
python-pytaglib
python-pyte
python-pytest-fixture-config
python-pytest-flakes
python-pytest-runner
python-pytimeparse
python-pyvmomi
python-repoze-lru
python-rmtest
python-robot-detection
python-scikit-build
python-scripttest
python-serpy
python-simplegeneric
python-singledispatch
python-slacker
python-sphinxcontrib-autoprogram
python-sphinxcontrib-trio
python-sql
python-ssdeep
python-statsd
python-svg-path
python-testscenarios
python-textparser
python-tgscheduler
python-timeout-decorator
python-translationstring
python-tree-format
python-trml2pdf
python-typing-inspect
python-virtualenv
python-volatile
python-wadllib
python-whoosh
python-wsgi_intercept
python-www-authenticate
python-xmp-toolkit
python-xunitparser
python-yaql
python-zc-customdoctests
python-zc-lockfile
python-zope-deprecation
python-zope-testing
python-zope-testrunner
python-zstd
sentencepiece
tpm2-pkcs11
transifex-client
Both lists together, by maintainers:
abbra python-whoosh
abompard python-flufl-i18n python-jinja2_pluralize python-pyramid_sawing python-pysocks python-translationstring python-zope-deprecation python-zope-testing python-zope-testrunner
adamwill python-mwclient
adrian flent
aekoroglu python-django-prometheus python-pytaglib python-repoze-lru python-serpy python-xunitparser
ajax binwalk
alexl pycairo
amigadave isrcsubmit python3-mallard-ducktype
amoralej python-rsd-lib python-yaql
ankursinha python-klusta python-num2words python-pyemd python-pyfim
apevec python-oslo-context python-testscenarios python-wsgi_intercept
asn cepces
athoscr python-booleanoperations python-epub python-fontMath python-glyphsLib python-mutatormath python-pyclipper
atim kitty
aviso python-enlighten
besser82 python-jcconv
caolanm pycairo
carlwgeorge python-pyproject-hooks
chandankumar python-oslo-context python-tosca-parser python-wsgi_intercept
chedi python-jinja2-time python-poyo python-pytest-flakes python-tree-format
chkr calibre
churchyard pyproject-rpm-macros python-genty python-launchpadlib python-lazr-uri python-nose python-scripttest python-simplegeneric python-virtualenv python-wadllib
cicku python-apsw
ckalina ddiskit
cottsay python-flake8-class-newline
cqi python-django-contrib-comments
cstratak python-virtualenv
dcallagh python-phonenumbers python-www-authenticate
dcavalca tpm2-pkcs11
dchen cepces
defolos grpc
dfateyev python-apsw
dherrera python-pytest-runner
dminer python-zstd
dshea python-jinja2_pluralize
echevemaster python-pydispatcher transifex-client
eeickmeyer python-jack-client
esyr ddiskit
fab ioc-writer past-time python-cx-oracle python-dfdatetime python-geojson python-gmqtt python-imagehash python-ipgetter2 python-jsonpath-ng python-jsonpath-rw python-shodan python-slacker python-textparser python-zc-customdoctests
fale python-decorator python-pyvmomi
fed500 python-pygmtools
fedepell python-jinja2-time
filiperosset hddfancontrol
fjanus PyGreSQL
frantisekz mozjs102
frostyx python-flask-wtf-decorators
fschwarz python-digitalocean python-genshi
girst mopidy mopidy-mpd
gsauthof python-aioresponses
gui1ty python-moksha-hub
hhorak PyGreSQL
hiwkby python-oslo-metrics
hobbes1069 python-collada
hvad python-events
ignatenkobrain python-pytest-flakes python-simplegeneric
jamatos python-markups python-smartypants
jcapitao python-cliff python-distroinfo python-timeout-decorator
jcaratzas python-repoze-lru python-simplegeneric python-singledispatch python-sphinxcontrib-trio python-zc-lockfile
jjelen tpm2-pkcs11
jkucera gpgme
jmontleon python-dictdiffer
jonathanspw kitty python-freeipa python-parsel python-pystray python-pytest-runner python-zstd
jonny python-libusb1
jorti python-pysrt
jpena python-murano-pkg-check python-tosca-parser
jruzicka python-tosca-parser
jujens python-CommonMark python-hgapi
jussilehtola fprettify
kalev pycairo
kevin calibre python-chai python-decorator python-html5-parser python-pycdio python-pyramid-tm python-pysocks python-pytest-fixture-config python-svg-path python-tgscheduler
kni python-ouimeaux python-pysignals
ktdreyer python-testscenarios
kushal python-daemon
laxathom python-gammu
lbalhar python-jupyter-packaging python-pyproject-api python-pyproject-hooks python-virtualenv
lbazan python-neurosynth transifex-client
lberk python-rmtest
lbrabec python-xunitparser
lcons python-auth-credential python-dirq python-messaging python-simplevisor
lecris python-scikit-build
limb python-typing-inspect
lnie libvirt-test-API
lyessaadi python-yapsy
maha python-sphinxcontrib-autoprogram
melmorabity grammalecte python-pycryptodomex
mfabian nototools
mhayden python-virtualenv
mhlavink gpgme
mohanboddu python-openidc-client
mrc0mmand gpgme
mrunge python-pytimeparse python-singledispatch python-testscenarios python-virtualenv
nathans python-rmtest
nb python-digitalocean
neil grpc python-gerritlib
ngompa python-case python-dkimpy python-freeipa python-pystray python-robot-detection python-zstd
opohorel python-launchpadlib python-lazr-uri python-wadllib
orion python-virtualenv python-zope-testing
orphan python-case python-fedmsg-meta-fedora-infrastructure python-hypothesis-fspaths python-iptools
osloup PyGreSQL
pbrobinson adapt gtts gtts-token pyjokes python-can python-casttube tpm2-pkcs11
peter python-libusb1
pingou python-binaryornot python-case python-chai python-flask-xml-rpc
pkubat PyGreSQL
pnemade ansible-inventory-grapher python-bracex python-cpuinfo
poros ddiskit
praiskup PyGreSQL
puiterwijk python-cccolutils
pwhalen pyjokes pyowm
pwu nototools
qulogic python-json-minify python-xmp-toolkit
radez python-zc-lockfile python-zope-testing
raphgro python-pdfkit python-pyvmomi
rathann lazygal
rcallicotte python-pyvmomi
rcritten cepces python-pyasn1
rdieter gpgme python-mwclient
rebus python-colorclass python-oletools
rhughes pycairo
robert python-oletools
rstrode pycairo
sagitter petsc
salimma kitty python-lupa python-pytest-runner python-robot-detection python-volatile python-zope-testrunner python-zstd
sergiomb python-gammu
sgallagh python-whoosh
sharkcz python-sql
shoracek tpm2-pkcs11
slinabery python-jsonpath-rw
solopasha kitty
spichugi python-pyasn1
suve python-ssdeep
swt2c binwalk
tdecacqu python-statsd
terjeros hgsvn python-cwcwidth python-httpsig-cffi python-pyte python-tidy
tflink python-xunitparser
thebeanogamer classification-banner
thm python-sphinxcontrib-trio python-textile python3-lxc
thofmann btrfs-sxbackup
thrnciar python-scikit-build
tieugene python-trml2pdf
tohojo flent
tomspur python-daemon python-simplegeneric
topazus sentencepiece
trawets fros
ttorling python-pysocks
twaugh python-journal-brief
vascom python-pymediainfo
vmojzis sepolicy_analysis
vtrefny python-pytimeparse
xavierb python-daemon
ykarel python-os-service-types
zaneb python-autopage
zawertun kitty
zbyszek calibre
zsun ddiskit
We will be slowly crushing the failures and opening bugzillas before we actually update setuptools.
Feedback
python-devel thread from August 2024: setuptools 72 removes setup.py test, your package(s) will break - python-devel - Fedora mailing-lists
Listed ~200 packages, ~30 were fixed in a month. Thank you, maintainers!
Benefit to Fedora
Fedora offers cutting-edge technologies for Python and setuptools is one of the most important Python packages. By doing this update we bring users the latest features that setuptools offers and also we enable Fedora 42+ to receive future updates as well.
Scope
-
Proposal owners: update python-setuptools to 74.x.x or newer, open bugzillas, provide help
-
Other developers: report problems to the upstream and backport patches to the affected packages. The impact can be tested using copr repository where setuptools 74+ has been built.
-
Release engineering: #12323
-
Policies and guidelines: N/A (not needed for this Change)
-
Trademark approval: N/A (not needed for this Change)
-
Alignment with the Fedora Strategy: First?
Upgrade/compatibility impact
There is a clean upgrade path from current version to python-setuptools 69.x.x. Fedora users using RPM-packaged setuptools will use setuptools 74+ by default.
Early Testing (Optional)
Do you require âQA Blueprintâ support? N
How To Test
- Find the package you want to update in the copr repository and check the build logs to determine the fail cause.
- Work with the upstream to resolve the issue or drop the need for
setup.py test
during the build of the package. - When updating the package, you can test it using the same copr repository where the latest version of setuptools has been built.
- Let us know if something doesnât work as it should.
User Experience
Regular distro users shouldnât notice any change in setuptools behavior, except for upstream-intended changes.
Dependencies
Contingency Plan
- Contingency mechanism: (What to do? Who will do it?) Provide a compat package with setuptools 69
- Contingency deadline: mass rebuild
- Blocks release? No
Documentation
This page is the documentation.
Release Notes
Last edited by @boredsquirrel 2024-09-24T10:57:26Z
Last edited by @boredsquirrel 2024-09-24T10:57:26Z