<div><span style="color: rgb(160, 160, 168); ">On Saturday, February 23, 2013 at 10:08 PM, Nick Coghlan wrote:</span></div><blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;">
<span><div><div><div>The core problem with making "==" strict is that it either makes "!="</div><div>useless by allowing "(!=1.3)" to match "1.3.1", or it breaks the</div><div>invariant that "!=" is the logical inverse of "==", by having both</div><div>"(==1.3)" and "(!=1.3)" reject "1.3.1". I don't consider either</div><div>acceptable, which is why I switched the PEP to simple string prefix</div><div>matching for both (this also brings it back into line with the default</div><div>version comparison behaviour specified in PEP 345 - I haven't yet</div><div>reinstated that PEPs commentary about why this makes it important to</div><div>include the ".0" suffix on the first release in a series so people can</div><div>easily depend specifically on that release without allowing later</div><div>releases in the series, but I'm definitely considering it).</div><div><br></div><div>If a true exact version match is needed in order to be completely</div><div>certain about avoiding potentially broken upstream releases, then you</div><div>can use "(X.Y, < X.Y.post0)" rather than "(==X.Y)". Really though,</div><div>that level of pre-emptive quality assurance is better handled by using</div><div>a private curated index (or even a per-application index) where you</div><div>don't allow new versions to be uploaded until you've already tested</div><div>them.</div></div></div></span></blockquote><div> </div><div>!=1.3 allowing 1.3.1 makes sense to me. 1.3 is equivalent to 1.3.0, 1.3.1 != 1.3.0.</div>