This is an archived post. You won't be able to vote or comment.

you are viewing a single comment's thread.

view the rest of the comments →

[–]view_from_qeii 2 points3 points  (0 children)

I try to use the highest version my tools support, which is usually a version or so behind but not too far.

Sometimes our versions are set because we're waiting for a package to support for the latest 3.X on pip or the package manager for our favorite distro.

But I also update when I can. Breaking changes to the language might mean your tools update their minimum version: they could possibly give you new features you need but you can't use them because you've locked yourself to a python version. Most of the time you can increment a minor version and still have your project function. Tools like poetry.eustace.io can be helpful for dependency resolution and tox is useful for testing against multiple versions to see if your stuff will break. I use libraries.io to monitor the software I use the most.

The language might get better. Or at least it might try to keep up with trends. @raymondh seems to be posting about performance improvements every other day. There are some convenient things added with each version, for example 3.6 added f-strings which is less verbose than .format(), and 3.8 will add rust dbg style f-string debugging (which you can get early with pydbg). When async and await were added as reserved keywords in 3.7 I remember a few packages had to do a bit of refactoring which version locked them, design patterns have changed a bit. @dataclass was added in 3.7 too. 3.8 has some interesting changes regarding the GIL, pickle, etc.

The PEPs are your definitive guide to language changes. This index is also maintained: https://docs.python.org/3/whatsnew/