On Jun 21, 2006, at 6:27 PM, Phillip J. Eby wrote: > At 05:37 PM 6/21/2006 -0400, Jim Fulton wrote: > >> Suppose I have the directory: >> >> /home/jim/tmp/dist: >> used 92 available 41345796 >> -rw-rw-r-- 1 jim jim 671 Jun 19 17:43 demoneeded-1.0-py2.4.egg >> -rw-rw-r-- 1 jim jim 672 Jun 19 17:46 demoneeded-1.1-py2.4.egg >> -rw-rw-r-- 1 jim jim 673 Jun 19 17:46 demoneeded-1.2-py2.4.egg >> -rw-rw-r-- 1 jim jim 673 Jun 19 17:46 demoneeded-1.3-py2.4.egg >> -rw-rw-r-- 1 jim jim 673 Jun 19 17:46 demoneeded-1.4-py2.4.egg >> -rw-rw-r-- 1 jim jim 673 Jun 19 17:46 demoneeded-1.5-py2.4.egg >> -rw-rw-r-- 1 jim jim 673 Jun 19 17:46 demoneeded-1.6-py2.4.egg >> -rw-rw-r-- 1 jim jim 673 Jun 19 17:46 demoneeded-1.7-py2.4.egg >> -rw-rw-r-- 1 jim jim 673 Jun 19 17:46 demoneeded-1.8-py2.4.egg >> -rw-rw-r-- 1 jim jim 673 Jun 19 17:46 demoneeded-1.9-py2.4.egg >> >> and then run easy install telling it to install something I >> already have: >> >> [EMAIL PROTECTED] ~]$ /usr/local/python/2.4/bin/easy_install -d tmp/dist >> -mxU demoneeded==1.1 > > The -U option means "always search PyPI". > >> I have some scripts that invoke easy_setup and I'd like to try to >> do some of this logic myself. Given a requirement, I'd like to >> get the specifiers and decide myself whether to invoke easy_install. >> I have 2 problems: >> >> - I don't want to parse the requirement myself, but, rather, >> use Requirement.parse. If I use Requirement.parse, I can use >> the specs attribute to get the specifiers, however, this >> attribute isn't documented. Should I assume that it is >> private? Or is it safe to use. > > Why do that when you can just ask the Requirement whether it > matches a particular version? The __contains__ method of > Requirement objects accepts a version string, distribution object, > or parsed version number you can use. > > (For that matter, you can query an Environment or WorkingSet for > the distributions whose versions you want to check.)
Here's my use case: I want to get the most recent distribution that satisfies my requirement. If my requirement sets an upper bound, and I already have the distribution at the upper bound, then I don't want to have to search the index. For us, it will be very common to specify specific distribution versions. I don't want to have to search an index if I already have the specific version. I understand that the -U option isn't designed to meet this use case. That's fine. I want to be able to introspect a requirement to determine wether it set an upper bound. __contains__ doesn't let me do that. With the rules that you've explained for evaluating a set of specifiers, I can do that if I can get at the specifiers. What I want is either a public API for getting the specifiers, or an API that lets me retrieve the upper bound, if there is one. (Obviously, it could return None if no upper bound exists.) Jim -- Jim Fulton mailto:[EMAIL PROTECTED] Python Powered! CTO (540) 361-1714 http://www.python.org Zope Corporation http://www.zope.com http://www.zope.org _______________________________________________ Distutils-SIG maillist - [email protected] http://mail.python.org/mailman/listinfo/distutils-sig
