It turns out that pip 0.72 has a few annoying little bugs, one of which is search does not support xmlrpc proxies, in particular authenticating proxies, correctly (207, 243). Changing pip, and the associated version of pip in virtualenv would be a slow process (I assume), and not something I'm capable of testing at the moment.
My quick fix solution is a command-line tool for searching pypi. This is done by replacing the transport used by xmlrpclib with one that uses urllib2. However, I've (informally) tested similar code in pip by patching download.py, and can confirm that it worked correctly on my system.
import os import urllib2 import xmlrpclib # install a proxy handler if required _proxy = os.environ.get('http_proxy', None) if _proxy: proxysupport = urllib2.ProxyHandler({"http": _proxy}) opener = urllib2.build_opener(proxysupport, urllib2.CacheFTPHandler) urllib2.install_opener(opener) class ProxyTransport(xmlrpclib.Transport): def request(self, host, handler, request_body, verbose): self.verbose = verbose url = 'http://%s%s' % (host, handler) request = urllib2.Request(url) request.add_data(request_body) # Note: 'Host' and 'Content-Length' are added automatically request.add_header("User-Agent", self.user_agent) request.add_header("Content-Type", "text/xml") # Important f = urllib2.urlopen(request) return(self.parse_response(f)) if __name__ == "__main__": import sys pypiurl = 'http://pypi.python.org/pypi' transport = ProxyTransport() pypi = xmlrpclib.ServerProxy(pypiurl, transport = transport) packages = pypi.search({'name' : sys.argv[1]}) for pkg in packages: print pkg['name'] print ' ', pkg['summary'].splitlines()[0]
No comments:
Post a Comment