def search(self, query, index_url, search_summery): pypi = xmlrpclib.ServerProxy(index_url) args = {'name': query} if search_summery: args['summary'] = query hits = pypi.search(args, 'or') return hits
def search_packages_info(self, query, index_url): """ Gather details from installed distributions. Print distribution name, version, location, and installed files. Installed files requires a pip generated 'installed-files.txt' in the distributions '.egg-info' directory. """ installed_packages = dict([(p.project_name.lower(), p) for p in pkg_resources.working_set]) for name in query: normalized_name = name.lower() if normalized_name in installed_packages: dist = installed_packages[normalized_name] required_by = [] for _, p in installed_packages.iteritems(): if dist.project_name.lower() in [ dep.project_name.lower() for dep in p.requires() ]: required_by += [p.project_name] else: for e in p.extras: if dist.project_name.lower() in [ dep.project_name.lower() for dep in p.requires([e]) ]: required_by += ["%s[%s]" % (p.project_name, e)] extras = {} requires = [dep.project_name for dep in dist.requires()] make_ext = lambda pkg_name: (pkg_name, True if pkg_name in installed_packages else False) for e in dist.extras: extras[e] = [ make_ext(dep.project_name.lower()) for dep in dist.requires([e]) if dep.project_name not in requires ] pypi = xmlrpclib.ServerProxy(index_url) pypi_releases = pypi.package_releases(dist.project_name) pypi_version = pypi_releases[0] if pypi_releases else 'UNKNOWN' package = { 'name': dist.project_name, 'version': dist.version, 'pypi_version': pypi_version, 'location': dist.location, 'requires': requires, 'required_by': required_by, 'extras': extras, 'metadata': PkgInfoParsed(dist), 'exports': pkg_resources.get_entry_map(dist) } filelist = os.path.join(dist.location, dist.egg_name() + '.egg-info', 'installed-files.txt') if os.path.isfile(filelist): package['files'] = filelist yield package
def do_version_info(options): """ List all installed packages with his versions and version info from PyPi """ local_only = True # exclude globally-installed packages in a virtualenv dependency_links = [] for dist in pkg_resources.working_set: if dist.has_metadata('dependency_links.txt'): dependency_links.extend( dist.get_metadata_lines('dependency_links.txt'), ) installed_info = [] for dist in get_installed_distributions(local_only=local_only): req = dist.as_requirement() # pkg_resources.Requirement() instance project_name = req.project_name specs = req.specs version = specs[0][1] installed_info.append((project_name, version)) max_name_len = max([len(i[0]) for i in installed_info]) max_ver_len = max([len(i[1]) for i in installed_info]) if max_name_len<20: max_name_len = 20 if max_ver_len<20: max_ver_len = 20 max_len_others = get_terminal_size()[0] - max_name_len - max_ver_len - 7 table_header = " package name".ljust(max_name_len) table_header += " installed version".ljust(max_ver_len) table_header += " versions on PyPi".ljust(max_len_others) print c.colorize(table_header, opts=("underscore",)) for project_name, version in installed_info: print project_name.ljust(max_name_len), print version.ljust(max_ver_len), # http://wiki.python.org/moin/PyPiXmlRpc client = xmlrpclib.ServerProxy(INDEX_URL) versions = client.package_releases(project_name) if not versions: print c.colorize("No version found at PyPi!", foreground="yellow") else: latest = highest_version(versions) older_versions = [v for v in versions if latest!=v] pypi_info = "%s" % latest if older_versions: pypi_info += " - %s" % ", ".join(older_versions) if len(pypi_info)>max_len_others: pypi_info = pypi_info[:max_len_others] + " ..." print pypi_info
def search(self, query, index_url): pypi = xmlrpclib.ServerProxy(index_url, pip.download.xmlrpclib_transport) hits = pypi.search({'name': query, 'summary': query}, 'or') return hits
def search(self, query, index_url): pypi = xmlrpclib.ServerProxy(index_url) hits = pypi.search({'name': query, 'summary': query}, 'or') return hits
def pypi(self): """I want to delay doing this, since might not be necessary""" if self.__pypi is None: self.__pypi = xmlrpclib.ServerProxy(self.search_url) return self.__pypi