All the gory details about the release timeline are in PEP 602 - https://www.python.org/dev/peps/pep-0602/
All the gory details about the release timeline are in PEP 602 - https://www.python.org/dev/peps/pep-0602/
That is IMO not ideal. If it was security fixes / new features / improvements with no new syntax then I would be OK.
I would say a lot of companies still have a very big legacy code base in 2.7... new services are created in docker using the latest python3 but desktop applications aren't as easy to upgrade constantly.
Some companies also use NFS to store python libraries (we release 100s of times per day) and make some wrangling of PYTHONPATH to allow applications to find dependencies. Having to support multiple (incompatible) versions of python at a workstation isn't a good problem to have.
I mean how would that with new features even work?
Walrus operator, fstring, etc. should happen maybe once every two years ideally? Did we really need the walrus operator? The cost of adding it is making any library using it in python 3.8+ incompatible with runtimes of python3.8<.
When I make public modules, I personally weigh whether using a new feature is worth losing users stuck on an older version. That sweet spot for me right now is targeting Python 3.6 and using backported modules where necessary (e.g. mypy-extensions). I'm a big type hint fan and type hinting became much more usable in >= 3.6.
[1] https://packaging.python.org/guides/distributing-packages-us...
Python used to offer it frequently. from __future__ import ...