On 02/23/2013 08:08 PM, Nick Coghlan wrote:
> On Sun, Feb 24, 2013 at 4:43 AM, Daniel Holth <dho...@gmail.com> wrote:
>> There simply must be a way to spell "equals" that means "equals". It will be
>> used when that so-called security release broke my application that
>> integrates said library in a way that doesn't even expose the flaw.
>>
>> Plone depends on hundreds of libraries that probably only use >= or no
>> version at all in their setup.py. Then the buildout.cfg ships with the ==
>> versions of all the libraries that the Plone release team actually tested.
>> == is not the common plague that you fear.
> 
> The core problem with making "==" strict is that it either makes "!="
> useless by allowing "(!=1.3)" to match "1.3.1", or it breaks the
> invariant that "!=" is the logical inverse of "==", by having both
> "(==1.3)" and "(!=1.3)" reject "1.3.1". I don't consider either
> acceptable, which is why I switched the PEP to simple string prefix
> matching for both
[snip]
> If a true exact version match is needed in order to be completely
> certain about avoiding potentially broken upstream releases, then you
> can use "(X.Y, < X.Y.post0)" rather than "(==X.Y)". Really though,
> that level of pre-emptive quality assurance is better handled by using
> a private curated index (or even a per-application index) where you
> don't allow new versions to be uploaded until you've already tested
> them.

If PEP 426 dependency version requirements are meant to support
applications as well as libraries, I very much agree with Daniel that a
real, strict == is critical, and should be the default behavior of ==. I
don't think "it makes != useless" is a sufficient argument to make ==
behave surprisingly; in my experience, the need for != is quite rare,
and it makes more sense to require multi-clause workarounds for !=,
rather than for the simple "this is what I want, don't you dare pick
anything else" case, which is quite common.

If you are dead-set against making == strict by default, then I think we
need a (gulp) === or similar. Requiring multi-clause workarounds or
curated package archives for strict dependency pinning is unacceptable, IMO.

Carl
_______________________________________________
Distutils-SIG maillist  -  Distutils-SIG@python.org
http://mail.python.org/mailman/listinfo/distutils-sig

Reply via email to