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