Skip to content

Instantly share code, notes, and snippets.

@streeter
Created March 3, 2013 04:50
Show Gist options
  • Save streeter/5074564 to your computer and use it in GitHub Desktop.
Save streeter/5074564 to your computer and use it in GitHub Desktop.
List all upgrades for python packages available in the current environment.
#!/usr/bin/env python
import xmlrpclib
import pip
import argparse
from pkg_resources import parse_version
def version_number_compare(version1, version2):
return cmp(parse_version(version1), parse_version(version2))
def print_status(package, message):
package_str = '{package.project_name} {package.version}'.format(package=package)
print '{package:40} {message}'.format(package=package_str, message=message)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('-a', '--all', dest='all', action='store_true', default=False)
parser.add_argument('-m', '--mirror', dest='mirror', default='http://pypi.python.org/pypi')
args = parser.parse_args()
if not args:
exit(-1)
pypi = xmlrpclib.ServerProxy(args.mirror)
for dist in pip.get_installed_distributions():
available = pypi.package_releases(dist.project_name)
if not available:
# Try the capitalized package name
available = pypi.package_releases(dist.project_name.capitalize())
upgrade_available = True
if not available:
print_status(dist, 'no releases at pypi')
continue
comparison = version_number_compare(available[0], dist.version)
if comparison == 0:
if not args.all:
continue
print_status(dist, 'up to date')
elif comparison < 0:
print_status(dist, 'older version on pypi')
else:
print_status(dist, '%s available' % available[0])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment