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


Reply via email to