<div dir="ltr"><div><div>In PEP440,  foo-X.Y.Z does not satisfy the specifier  "foo>X.Y" (although it satisfies "foo>=X.Y")<br><br></div><div>for example,  foo-1.7.2 will not satisfy  "foo>1.7", but it will satisfy "foo>=1.7"</div><div><br></div>for '>' and '<', PEP440 states that they are  "interpreted as implying the prefix based version
exclusion clause
     <tt>
      != V.*"</tt><br><br></div><div>the rationale from Donald for this is explained here:  <a href="https://bitbucket.org/pypa/setuptools/issue/301/101-in-requirementparse-foo-10-results" target="_blank">https://bitbucket.org/pypa/setuptools/issue/301/101-in-requirementparse-foo-10-results</a><br><br></div><div>in brief, this was done to avoid pre-releases (i.e. something like "foo-1.7a1") satisfying "foo<1.7".   <br><br></div><div>It seems to me we've just traded one confusion for another, and this seems worse (to me at least, although I'm trying to let it sink in)<br><br>1.7.2 is greater than 1.7, and the specifiers should honor that.  It's hard to accept otherwise.<br><br></div><div>Yes, it's true in the past, when people would get a pre-release installed (for example 1.7a1), when they really wanted something in the 1.6.X series, that was also confusing.  But now that pip now excludes pre-releases by default, it seems that confusion is mostly solved practically speaking, so why solve it (and create a new confusion)?<br></div><div><br></div><div>Marcus</div><div><br><br></div><div><tt><br></tt></div><div><tt><br><br></tt></div></div>