On Thu, Apr 15, 2021 at 9:54 PM Christopher Barker <python...@gmail.com> wrote:
> 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.
_______________________________________________ Python-Dev mailing list -- python-dev@python.org To unsubscribe send an email to python-dev-le...@python.org https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/ZIGLNTQC7WT43UMLQQHT7UB57KX7EFCX/ Code of Conduct: http://python.org/psf/codeofconduct/