Yep, python is a moving target...
Python is fine.
The problem is that most people (especially the ones using stuff like Jupyter - i.e. mostly research folks) don't have a clue (or care!) how to build software for distribution, how to manage dependencies properly, etc. But that's not fault of Python. Python has plenty of good tools designed to handle this for you, one only has to use them!
One can make the same or worse horrific mess in any language. Don't bring up the argument that "I wrote some C or assembler software 20 years ago and still runs" - sure and since it has never been updated it is likely full of security holes and bugs thanks to the linked in dependencies. Or (given the nature of this forum) it is some embedded stuff irrelevant to the debate. And btw, the same feat is possible perfectly fine with Python too - as long as you don't distribute only "naked scripts", letting the user figure out (tearing their hair out in the process) which versions of which dependency they have to install to make it work ...
Especially things like the Jupyter(Lab) notebook with its many plugins, PyTorch, Tensorflow (the AI frameworks) that are using Python as glue to bring together hundreds or thousands of dependencies written in various languages (including C/C++, Fortran, Javascript ...) in a very fragile manner are a nightmare. Done typically with no proper dependency version control, so one package somewhere deep in the dependency tree gets updated because of something unrelated - and now the entire stack is broken. To make it worse, most of that code is written in a way of "throwaway" notebooks and scripts because the goal is to get a paper published as quickly as possible by a guy or girl who programs only because they have to, not because they are programmers. And not to produce any sort of "production quality" code.
And if something underlying like CUDA or Nvidia drivers (which are used by the above for acceleration of the computation) changes because of a forced automatic update, then even containers like Docker or a complete VM (e.g. VirtualBox) won't save you.
If you want to make sure something keeps running you need to "freeze" that version of the system in a VM - and never touch it anymore. Including never letting e.g. Windows to update anything. Linux is much easier in this regard because you have complete control over the update process. In Windows this is difficult unless the system is airgapped from the Internet.
EDIT: I have slept on this and to be constructive, here are a few suggestions how to make your Python life easier:
If you don't need CUDA for AI, then being rigorous with dependency management (e.g. using tools like poetry, pipenv or at least a requirements.txt file!) together with virtual environments to isolate applications from each other (both pipenv & poetry manage that for you) will make sure your code remains installable and working. And if you distribute your thing, distribute it
including those build configurations!. Even better - make a proper Python package and have the thing distributed via PyPi so that it can be installed using pip.
"Naked" scripts are only acceptable if they don't have any dependencies beyond what is in the standard library - and even then be clear about which Python version is required as a minimum if you use any sort of "exotic" features - such as asyncio (needs 3.6+), match keyword (3.10+), etc. And please, don't write new software requiring Python 2!
For end users who don't want to install Python and every dependency, build an executable - e.g. pyinstaller will do it for you. Far better than slapping a python script on Github and then people complain that they can't get it to work because it relies on this or that in version X but version X+2 has changed API and now your script doesn't work for them but since it is the latest, that's what gets installed.
Also, never distribute code that is meant to be used for actual "production" (i.e. not only research, quick tests) as a Jupyter notebook. The notebooks don't have the abovementioned version management, neither for Python dependencies by default and neither for the various Jupyter plugins that may be required e.g. to display some plots and what not. Use Jupyter to generate images for documentation but the actually useful code should be in properly managed Python modules instead that don't depend on 20 Jupyter javascript plugins to work. Even plots can be generated without Jupyter - e.g. matplotlib or bokeh work from "straight" Python too.
And for "users" of those python scripts - never install anything into the system-wide Python installation. I.e. don't just run "pip install foo"! Always set up a virtual environment first, to keep your Python applications isolated from each other, so that installing e.g. numpy version 1 doesn't break another tool that needs numpy version 2.
If everyone followed this it would have made everyone's life a lot easier and there would be far less bashing Python for things that are not its fault.