Created
March 3, 2013 04:50
-
-
Save streeter/5074564 to your computer and use it in GitHub Desktop.
List all upgrades for python packages available in the current environment.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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