Hi, recently there was some discussion and debate over what versions of which things in the Python ecosystem we need to support with regards to our build platform promise. I don't address those issues in this mail at all. O:-)
In researching that problem, I created a CLI script to automatically poll repology and several other sources (homebrew and macports APIs) to assemble a cohesive overview of the "Python ecosystem" across all of our target platforms. I felt this was necessary because it's often quite difficult to determine at a glance what is available as each platform has quite different ways of packaging, de/bundling, or factoring these tightly related projects. Here's the summary output: nago@fedora ~/s/repology-dashboard (devel)> python3 python_repology.py Fetching https://repology.org/api/v1/project/python Fetching https://repology.org/api/v1/project/python%3Asphinx Fetching https://repology.org/api/v1/project/python%3Asetuptools Fetching https://repology.org/api/v1/project/setuptools Fetching https://repology.org/api/v1/project/pip Fetching https://ports.macports.org/api/v1/ports/py-setuptools/ MacPorts de-facto python version is python313. Results will be narrowed. FreeBSD de-facto python version is 311. Results will be narrowed. NetBSD de-facto python version is 312. Results will be narrowed. Fetching https://formulae.brew.sh/api/formula/[email protected] Homebrew de-facto python version is [email protected]. Results will be narrowed. ... ======== overview ======== distro python3 pip setuptools sphinx repos ------------------------------------------------------------------------------------------------------- alpine_3_19 3.11.13 23.3.1 70.3.0 6.2.1 main, community alpine_3_20 3.12.11 24.0 70.3.0 7.2.6 main, community alpine_3_21 3.12.11 24.3.1 70.3.0 8.1.3 main, community alpine_3_22 3.12.11 25.1.1 80.9.0 8.2.3 main, community centos_stream_9 3.9.23 21.3.1 53.0.0 3.4.3 BaseOS, CRB centos_stream_10 3.12.11 23.3.2 69.0.3 7.2.6 BaseOS, CRB debian_12 3.11.2 23.0.1 66.1.1 5.3.0 bookworm/main fedora_40 3.12.10 23.3.2 69.0.3 7.2.6 updates, release fedora_41 3.13.5 24.2 69.2.0 7.3.7 updates, release fedora_42 3.13.5 24.3.1 74.1.3 8.1.3 updates, release freebsd 3.11.13 23.3.2 63.1.0 5.3.0 --- homebrew 3.13.5 --- 80.9.0 8.2.3 --- macports 3.13.5 25.1.1 78.1.1 8.2.3 --- openbsd 3.12.11 25.1.1 79.0.1 8.2.3 --- opensuse_leap_15_6 3.6.15 20.0.2 44.1.1 2.3.1 updates/sle, main/oss pkgsrc_current 3.12.11 25.1.1 80.9.0 8.2.3 --- ubuntu_22_04 3.10.12 22.0.2 59.6.0 4.3.2 jammy-updates/main, jammy/universe, jammy/main ubuntu_24_04 3.12.3 24.0 68.1.2 7.2.6 noble/main, noble/universe ubuntu_24_10 3.12.7 24.2 74.1.2 7.4.7 oracular/main, oracular/universe ubuntu_25_04 3.13.3 25.0 75.8.0 8.1.3 plucky/main, plucky/universe Some notes and observations: (1) Homebrew doesn't have a pip version listed because technically Homebrew does not ship pip; it's bundled directly with python. I did not find any reasonable mechanism to determine what that version is. However, as part of a "ports" style collection, it's usually bleeding edge and not likely to run afoul of "too old to reasonably support". (2) Alpine doesn't ship pip except via its "community" repo. I am unclear on if this is a repository enabled by default or not. (3) CentOS stream does not ship "sphinx" except via "CRB", which I think may not be enabled by default. (4) OpenSUSE Leap 15.6 is egregiously old. 16.x is promised for later this year, but we are past the promised "five year" support window for this platform in some sense -- 15.0 released in 2018 -- so I believe it can actually be ignored. Even though we still have a (working) dockerfile for it, and I see value in supporting SUSE in general, future python subsystem decisions may opt to exclude SUSE as a first-tier supported platform as per our policy. (It is also possible to pull in newer packages from different streams, but I was unable to investigate this in detail at this time.) (5) Ubuntu only ships pip in "universe", but also ships some Python 3.x interpreter updates to that repository as well. I have filtered this list to only use Universe for pip packages, leaving Python the base version that ships with the platform in x/main or x-updates/main. (6) "ports" collections (FreeBSD, NetBSD, OpenBSD/pkgsrc_current, Homebrew and MacPorts) do not necessarily have the concept of a platform default Python interpreter version, but other packages in the collection can be used as a heuristic to determine which one is best suited. For instance, FreeBSD and NetBSD only ship pip et al for a single interpreter version. OpenBSD has a symbolic "python3" package that installs a specific version. Homebrew has a "python3" alias that chooses a specific Python interpreter version. MacPorts similarly has a symbolic "py-setuptools" package that will choose a specific interpreter version. These are used as heuristics to determine a "de-facto" default for the ports collection platforms. - That's all for now. I will publish the script to the list later, though I have no intention of cleaning it up for inclusion in our tree. When I send it, bookmark the email if you'd like to try using this for other purposes or running it for yourself. Maybe I will throw it up on my personal GitLab in case it is useful to other subsystem maintainers in the future. The filtering code is a little messy, but it got the job done and should be reasonably straightforward to make sense of at a glance. It uses only the 'requests' library as a third party dependency. Your humble Python sin-eater, --js
