F45 Change Proposal: Setuptools 82+ [SelfContained]

Setuptools 82+

Wiki

Announced

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 :open_book:

Update to a new upstream release of python-setuptools that is not completely compatible with previous releases. Most notably, pkg_resources module was removed. This is a breaking change and Fedora packages that use pkg_resources should use the [importlib.resources – Package resource reading, opening and access — Python 3.14.3 documentation importlib.resources] and [importlib.metadata – Accessing package metadata — Python 3.14.3 documentation importlib.metadata] projects for common use cases. There might be other breaking changes. We estimate about ~130 Fedora Rawhide packages to fail to build due to this upgrade (as of March 2026), more packages might be affected if they use pkg_resources on runtime. A deprecated compatibility package python-setuptools80 will be provided for packages that cannot migrate away from pkg_resources yet.

Owner :open_book:

Detailed Description :open_book:

[https://setuptools.pypa.io/ 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 pkg_resources in version 82.x.x which was deprecated since April 2021.

There is no straightforward migration guide, the codebase needs to be adapted to modern standards. As a temporary workaround, we plan to package setuptools compat package, which will provide pkg_resources for packages that haven’t updated their codebase yet. Alternatively, there is an ongoing upstream discussion about releasing pkg_resources as a standalone package. If it ever happens, we might consider packaging it into Fedora.

With the compat package in place, maintainers can add BuildRequires: python3-pkg_resources to use the pkg_resources module on build time or Requires: python3-pkg_resources for runtime. Alternatively, if the comapt package is needed for other reasons than pkg_resources, packages can (Build)Require python3-setuptools < 82, python3dist(setuptools) < 82~~ or similar. We strongly recommend working with the upstream and migrating projects to more modern tools.

List of packages that failed in our testing copr but did not fail in a control copr as of 2026-02-17:

See more up-to-date results at Making sure you're not a bot!

Maintainers by package:

TurboGears2          cverna ondrejj

arandr               mrc0mmand

azure-cli            jcline

beaker               martstyk

bodhi-server         abompard humaton lenkaseg

buildstream          atim jjardon

collectd             jonathanspw kevin mhlavink

compose-utils        carlwgeorge lsedlar

dogtag-pki           abbra cfu edewata jmagne mfargett vakwetu

emacs-jedi           melmorabity

gau2grid             jussilehtola

gnome-todo           amigadave kalev mclasen mcrha

gns3-net-converter   kwizart

grpc                 defolos neil

home-assistant-cli   thebeanogamer

input-remapper       alexpl

lammps               cz4rs junghans rberger

libgda               limb lkundrak

libmodulemd          asamalik nphilipp ppisar sgallagh

libpeas              amigadave kalev mclasen

linux-system-roles   ngompa pcahyna rmeggins spetros till

nicotine+            melmorabity

nmstate              cathay4t ffmancera ihuguet till

oci-cli              mhayden neil

onnxruntime          aalvarez dherrera

packit               lachmanfrantisek lbarczio mfocko mmassari nforro nikromen ttomecek

petsc                sagitter

pl                   jjames pampelmuse

protobuf             adrian jonathanspw mizdebsk orion salimma

pygame               jskarvad limb

pyp2rpm              gordonmessmer

python-TestSlide     dcavalca salimma

python-XStatic       nikromen rdopiera

python-XStatic-Angular-UUID rdopiera

python-XStatic-Angular-Vis rdopiera

python-XStatic-Bootstrap-SCSS nikromen rdopiera

python-XStatic-DataTables dmsimard

python-XStatic-FileSaver rdopiera

python-XStatic-JS-Yaml rdopiera

python-XStatic-Json2yaml rdopiera

python-XStatic-Patternfly dmsimard

python-XStatic-Patternfly-Bootstrap-Treeview dmsimard

python-aiosmtpd      abompard psimovec

python-astroid       bcl limb mrunge orion

python-astroquery    sergiopr

python-asyncpg       music

python-binary-manager dcavalca

python-catkin_tools  ankursinha cottsay

python-cerberus      ngompa rcallicotte

python-click-plugins qulogic

python-coincurve     peter

python-cornice       mattia

python-decopatch     zbyszek

python-deprecated    mfocko phracek ttomecek

python-dijitso       limb

python-django-configurations dcavalca salimma

python-dropbox       limb

python-eccodes       jdekloe

python-edgegrid      carlwgeorge

python-envisage      orion

python-fastprogress  sergiopr

python-flufl-bounce  abompard

python-gearbox       kevin ondrejj

python-genshi        fschwarz

python-geotiler      iztokf

python-gitlab        stevetraylen

python-google-cloud-core fkolwa jonathanspw

python-google-cloud-dns jorti

python-html5lib      churchyard pjp sagitter salimma

python-jenkins-job-builder ignatenkobrain ktdreyer sicherha

python-jupyter-server lbalhar

python-launchpadlib  churchyard opohorel

python-lazr-config   abompard

python-lazr-delegates abompard

python-lazr-uri      churchyard opohorel

python-lesscpy       abbra

python-libsass       jonathanspw music

python-linuxdoc      ankursinha

python-llvmlite      ankursinha

python-lsp-black     gui1ty jonathanspw

python-makefun       orion zbyszek

python-mathics-scanner dcavalca

python-migen         somlo

python-moddb         bunnyapocalypse farchord

python-mpmath        jussilehtola kkeithle zbyszek

python-mwclient      adamwill

python-nagiosplugin  aekoroglu slaanesh

python-opcodes       trix

python-openstep-plist music

python-opfunu        iztokf

python-paste         abompard ondrejj

python-peachpy       trix

python-phply         sshil

python-plaster-pastedeploy abompard

python-platformio    dcavalca music

python-pluginlib     aviso

python-psutil        salimma

python-pybtex-docutils jjames

python-pymediainfo   vascom

python-pyramid       kevin

python-pyramid-mako  kevin

python-pyramid-tm    kevin

python-pysb          zbyszek

python-pyspike       ankursinha

python-pytest-cases  zbyszek

python-pytest-harvest zbyszek

python-pytest-tornado qulogic

python-qudida        thunderbirdtr

python-repoze-sphinx-autointerface jjames lbalhar

python-repoze-who    cverna ondrejj

python-requirements-parser gotmax23

python-robosignatory mattia

python-rpmautospec   nphilipp sgallagh

python-scales        lbalhar lkundrak

python-sentry-sdk    orange-kao pwouters rominf rommell

python-sphinx-kr-theme dcavalca salimma

python-sphinxcontrib-autoprogram maha

python-sphinxcontrib-chapeldomain fed500

python-sport-activities-features gui1ty

python-ssdeep        suve

python-stone         limb

python-streamlink    melmorabity

python-subliminal    jorti

python-sushy         amoralej divius

python-tgext-tw2     ondrejj

python-tilestache    cottsay

python-torchvision   trix

python-traitsui      ignatenkobrain orion

python-vcstool       cottsay

python-vsts          jcline

python-wadllib       churchyard opohorel

python-webob         ondrejj

python-wheel0.37     churchyard

python-wxpython4     swt2c

python-xbout         davidsch

python-xlib          orion rcallicotte

python-zope-event    abompard orion

python3-mallard-ducktype amigadave

roca-detect          sdgathman

rrdtool              jskarvad

scap-security-guide  evgenyz jcerny marcusburghardt mburket mmarhefk vpolasek

spectrographic       orphan

supervisor           aekoroglu

sympy                cbm jjames jussilehtola kkeithle orion

systemd              daandemeyer lnykryn yuwata zbyszek

thefuck              principis

tito                 frostyx maxamillion

vdirsyncer           astra mathstuf salimma

whipper              mavit

xtensor-python       sergesanspaille

Packages by maintainer:

aalvarez   onnxruntime

abbra      dogtag-pki python-lesscpy

abompard   bodhi-server python-aiosmtpd python-flufl-bounce python-lazr-config python-lazr-delegates python-paste python-plaster-pastedeploy python-zope-event

adamwill   python-mwclient

adrian     protobuf

aekoroglu  python-nagiosplugin supervisor

alexpl     input-remapper

amigadave  gnome-todo libpeas python3-mallard-ducktype

amoralej   python-sushy

ankursinha python-catkin_tools python-linuxdoc python-llvmlite python-pyspike

asamalik   libmodulemd

astra      vdirsyncer

atim       buildstream

aviso      python-pluginlib

bcl        python-astroid

bunnyapocalypse python-moddb

carlwgeorge compose-utils python-edgegrid

cathay4t   nmstate

cbm        sympy

cfu        dogtag-pki

churchyard python-html5lib python-launchpadlib python-lazr-uri python-wadllib python-wheel0.37

cottsay    python-catkin_tools python-tilestache python-vcstool

cverna     TurboGears2 python-repoze-who

cz4rs      lammps

daandemeyer systemd

davidsch   python-xbout

dcavalca   python-TestSlide python-binary-manager python-django-configurations python-mathics-scanner python-platformio python-sphinx-kr-theme

defolos    grpc

dherrera   onnxruntime

divius     python-sushy

dmsimard   python-XStatic-DataTables python-XStatic-Patternfly python-XStatic-Patternfly-Bootstrap-Treeview

edewata    dogtag-pki

evgenyz    scap-security-guide

farchord   python-moddb

fed500     python-sphinxcontrib-chapeldomain

ffmancera  nmstate

fkolwa     python-google-cloud-core

frostyx    tito

fschwarz   python-genshi

gordonmessmer pyp2rpm

gotmax23   python-requirements-parser

gui1ty     python-lsp-black python-sport-activities-features

humaton    bodhi-server

ignatenkobrain python-jenkins-job-builder python-traitsui

ihuguet    nmstate

iztokf     python-geotiler python-opfunu

jcerny     scap-security-guide

jcline     azure-cli python-vsts

jdekloe    python-eccodes

jjames     pl python-pybtex-docutils python-repoze-sphinx-autointerface sympy

jjardon    buildstream

jmagne     dogtag-pki

jonathanspw collectd protobuf python-google-cloud-core python-libsass python-lsp-black

jorti      python-google-cloud-dns python-subliminal

jskarvad   pygame rrdtool

junghans   lammps

jussilehtola gau2grid python-mpmath sympy

kalev      gnome-todo libpeas

kevin      collectd python-gearbox python-pyramid python-pyramid-mako python-pyramid-tm

kkeithle   python-mpmath sympy

ktdreyer   python-jenkins-job-builder

kwizart    gns3-net-converter

lachmanfrantisek packit

lbalhar    python-jupyter-server python-repoze-sphinx-autointerface python-scales

lbarczio   packit

lenkaseg   bodhi-server

limb       libgda pygame python-astroid python-dijitso python-dropbox python-stone

lkundrak   libgda python-scales

lnykryn    systemd

lsedlar    compose-utils

maha       python-sphinxcontrib-autoprogram

marcusburghardt scap-security-guide

martstyk   beaker

mathstuf   vdirsyncer

mattia     python-cornice python-robosignatory

mavit      whipper

maxamillion tito

mburket    scap-security-guide

mclasen    gnome-todo libpeas

mcrha      gnome-todo

melmorabity emacs-jedi nicotine+ python-streamlink

mfargett   dogtag-pki

mfocko     packit python-deprecated

mhayden    oci-cli

mhlavink   collectd

mizdebsk   protobuf

mmarhefk   scap-security-guide

mmassari   packit

mrc0mmand  arandr

mrunge     python-astroid

music      python-asyncpg python-libsass python-openstep-plist python-platformio

neil       grpc oci-cli

nforro     packit

ngompa     linux-system-roles python-cerberus

nikromen   packit python-XStatic python-XStatic-Bootstrap-SCSS

nphilipp   libmodulemd python-rpmautospec

ondrejj    TurboGears2 python-gearbox python-paste python-repoze-who python-tgext-tw2 python-webob

opohorel   python-launchpadlib python-lazr-uri python-wadllib

orange-kao python-sentry-sdk

orion      protobuf python-astroid python-envisage python-makefun python-traitsui python-xlib python-zope-event sympy

orphan     spectrographic

pampelmuse pl

pcahyna    linux-system-roles

peter      python-coincurve

phracek    python-deprecated

pjp        python-html5lib

ppisar     libmodulemd

principis  thefuck

psimovec   python-aiosmtpd

pwouters   python-sentry-sdk

qulogic    python-click-plugins python-pytest-tornado

rberger    lammps

rcallicotte python-cerberus python-xlib

rdopiera   python-XStatic python-XStatic-Angular-UUID python-XStatic-Angular-Vis python-XStatic-Bootstrap-SCSS python-XStatic-FileSaver python-XStatic-JS-Yaml python-XStatic-Json2yaml

rmeggins   linux-system-roles

rominf     python-sentry-sdk

rommell    python-sentry-sdk

sagitter   petsc python-html5lib

salimma    protobuf python-TestSlide python-django-configurations python-html5lib python-psutil python-sphinx-kr-theme vdirsyncer

sdgathman  roca-detect

sergesanspaille xtensor-python

sergiopr   python-astroquery python-fastprogress

sgallagh   libmodulemd python-rpmautospec

sicherha   python-jenkins-job-builder

slaanesh   python-nagiosplugin

somlo      python-migen

spetros    linux-system-roles

sshil      python-phply

stevetraylen python-gitlab

suve       python-ssdeep

swt2c      python-wxpython4

thebeanogamer home-assistant-cli

thunderbirdtr python-qudida

till       linux-system-roles nmstate

trix       python-opcodes python-peachpy python-torchvision

ttomecek   packit python-deprecated

vakwetu    dogtag-pki

vascom     python-pymediainfo

vpolasek   scap-security-guide

yuwata     systemd

zbyszek    python-decopatch python-makefun python-mpmath python-pysb python-pytest-cases python-pytest-harvest systemd

We will be slowly crushing the failures and opening bugzillas before we actually update setuptools.

Feedback :open_book:

Benefit to Fedora :open_book:

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 + to receive future updates as well.

Scope :open_book:

  • Proposal owners: update python-setuptools to 82.x.x or newer, package python-setuptools80, open bugzillas, provide help
  • Other developers: report problems to the upstream and backport patches to the affected packages. The impact can be tested using [Making sure you're not a bot! copr repository] where setuptools 82+ has been built.
  • Release engineering: [Making sure you're not a bot! #]
  • Policies and guidelines: N/A (not needed for this Change)
  • Trademark approval: N/A (not needed for this Change)
  • Alignment with the Fedora Strategy:

Upgrade/compatibility impact :open_book:

There is a clean upgrade path from current version to python-setuptools 82+. Fedora users using RPM-packaged setuptools will use setuptools 82+ by default.

Early Testing (Optional) :open_book:

Do you require ‘QA Blueprint’ support? N

How To Test :open_book:

  • Find the package you want to update in the [https://copr.fedorainfracloud.org/coprs/thrnciar/python-setuptools copr repository] and check the build logs to determine the fail cause.
  • Work with the upstream to resolve the issue or drop the usage of pkg_resources module.
  • When updating the package, you can test it using the same [Making sure you're not a bot! copr repository] where the latest version of setuptools has been built.
  • Let us know if something doesn’t work as it should.

User Experience :open_book:

Regular distro users shouldn’t notice any change in setuptools behavior, except for upstream-intended changes.

Dependencies :open_book:

Contingency Plan :open_book:

  • Contingency mechanism: (What to do? Who will do it?) Provide a compat package with setuptools 80.10.2
  • Contingency deadline: N/A (not a System Wide Change)
  • Blocks release? N/A (not a System Wide Change)

Documentation :open_book:

[History - setuptools 82.0.1 documentation Setuptools changelog]

This page is the documentation.

Release Notes :open_book:

\n

Last edited by @alking 2026-03-25T19:11:32Z

Last edited by @alking 2026-03-25T19:11:32Z

How do you feel about the proposal as written?

  • Strongly in favor
  • In favor, with reservations
  • Neutral
  • Opposed, but could be convinced
  • Strongly opposed
0 voters

If you are in favor but have reservations, or are opposed but something could change your mind, please explain in a reply.

We want everyone to be heard, but many posts repeating the same thing actually makes that harder. If you have something new to say, please say it. If, instead, you find someone has already covered what you’d like to express, please simply give that post a :heart: instead of reiterating. You can even do this by email, by replying with the heart emoji or just “+1”. This will make long topics easier to follow.

Please note that this is an advisory “straw poll” meant to gauge sentiment. It isn’t a vote or a scientific survey. See About the Change Proposals category for more about the Change Process and moderation policy.

In case it helps anyone else, I just fixed one of my packages to account for this, and it was easier than I expected. The upstream was only using pkg_resources to declare a namespace, which hasn’t been necessary since Python 3.3 (PEP 420).

I just had to make these changes:

  • delete the namespace __init__.py file
  • remove the namespace_packages argument in setup.py
  • switch from find_packages to find_namespace_packages in setup.py

I submitted this upstream and then included it as a patch in the Fedora package. I’m sure some packages will be more difficult, but others may be as simple as this.

1 Like

Some other examples:

Thanks for the detailed proposal.

Can you clarify how the setuptools compat package will be implemented? The standalone pkg_resources package option mentioned seems much safer than having two different versions of setuptools in the distribution. I am worried the temporary workaround will turn into a longstanding headache.

If both packages provide python3dist(setuptools) and implement the PEP 517 backend, I see multiple potential issues. Different versions of setuptools could be pulled in if pkg_resources is added or removed from a package’s dependency tree which could cause hard to debug build issues. What happens when the next Python version is released and we have to patch the old setuptools version that’s unmaintained upstream? Or when upstreams adopt new setuptools features and need the latest setuptools version to build but also have test dependencies that pull in the old compat package for pkg_resources?

So my current plan is to do the following:

Package python-setuptools80 compat package. It builds python3-setuptools80 with all the files and Python metadata and RPM python3dist Provides, but it has pkg_resources %excluded. It Conflicts with python3-setuptools and Requries python3-pkg-resources = %{version}-%{release}.

From the same spec, also build a python3-pkg-resources subpackage with pkg_resources only. It has no Python metadate. It Conflicts with python3-setuptools < 82 but not with the newer ones.

Benefit:

If a package only needs pkg_resources to function, we can add (Build)Requires python3-pkg-resources, which will be pulled in and will not produce any conflicts with current setuptools versions.

If upstream pins setuptools<82 we generate a requirement on python3dist(setuptools) < 82~~ and the python3-setuptools80 + python3-pkg-resources will be pulled in. This will likely cause some conflicts, but as long as this happens heavily on build time only, it should not create any trouble.

Why not package only python3-pkg-resources? Upstreams that pin setuptools<82 would need to be patched and I don’t like that idea.

What happens when the next Python version is released and we have to patch the old setuptools version that’s unmaintained upstream?

We deal with it. As long as it is viable. We can always cry for help, orphan etc., when it is no longer so. We’ve been patching nose for new Pythons for 7+ years.

Or when upstreams adopt new setuptools features and need the latest setuptools version to build but also have test dependencies that pull in the old compat package for pkg_resources?

Hopefully, if they only pull in pkg_resources they should be fine. But if their test dependencies runtime Require python3-setuptools80, then this would create a conflicting request. I hope such a situation would be limited to bare minimum.

This change proposal has now been submitted to FESCo with ticket #3590 for voting.

To find out more, please visit our Changes Policy documentation.