On Thu, Apr 15, 2021 at 9:54 PM Christopher Barker
Or rather, the below is what I would find really nice to be able to do.
ver = robust_version(module) if ver >= (5, 2, 1): doit_modern_style() elif ver < (5, 2, 1): doit_old_style else: doit_unversioned_style()
Exactly -- and I htink we are close, if pacakges(modules) had compliant __version__ strings, then you could do (with the Version object from packaging -- maybe why it should be in the stdlib)
ver = Version(module.__version__) if ver >= Version("5.2.1"): doit_modern_style() elif ver < Version("5.2.1"): doit_old_style else: doit_unversioned_style()
This wouldn't be bad. A little more verbose, but fine. The thing is, I almost never care about the version of a *distribution* in my programs. I care about a version of the *package*. Since, as Chris mentions, a distribution could contain multiple packages, the same package could be vendorized (in different versions) by different distributions. The question I want to ask above is always because "version such-and-such changed an API," and that's about a package. When I care about distribution versions, it is because there are dependencies stated in requirements.txt or environment.yaml or whatever.deb. Asking for the `.__version__` attributes feels like needless redundancy in Chris' variation. The constructor should be able to ask "Is this a module? If so, does it have that attribute". But whatever, I can learn to do that easily enough. Someone else mentioned that the versions of standard library modules are an odd collection of relics. I do not disagree, of course. But sometimes the stdlib modules *do* change. I thought of the `re` example because I was doing a tutorial on it, and something or another depended on a change between 3.8 and 3.9 (I think, I forget the detail). For training material, this can just be approached as describing the Python version... but for running code, a version check could be relevant. Therefore, I think this `Version` constructor (or `robust_version()` function, or whatever) should have access to that. I.e. if not an automated update to `.__version__` inside each stdlib module during builds, then a fallback to "If this is a stdlib module, report sys.version_info (within the right kind of "Version" object). -- The dead increasingly dominate and strangle both the living and the not-yet born. Vampiric capital and undead corporate persons abuse the lives and control the thoughts of homo faber. Ideas, once born, become abortifacients against new conceptions.