Skip to content

Instantly share code, notes, and snippets.

@rvause
Last active August 29, 2015 14:06
Show Gist options
  • Select an option

  • Save rvause/d666f8b4941af326da4a to your computer and use it in GitHub Desktop.

Select an option

Save rvause/d666f8b4941af326da4a to your computer and use it in GitHub Desktop.
Prints out all installed packages with their requirements and reverse requirements.
#!/usr/bin/env python
from collections import OrderedDict
import pip
import sys
class PackageInfo(object):
def __init__(self, *args, **kwargs):
self._info_struct = {}
@property
def info(self):
if not self._info_struct:
self.process_packages()
return self._info_struct
def process_packages(self):
for item in pip.get_installed_distributions():
item_name = item.project_name.lower()
self.ensure_package(item_name)
self._info_struct[item_name]['version'] = item.version
for req in item.requires():
self._info_struct[item_name]['requires'].append(req)
req_name = req.project_name.lower()
self.ensure_package(req_name)
self._info_struct[req_name]['reverse'].append(
(item_name, item.version),
)
def ensure_package(self, name):
if name not in self._info_struct.keys():
self._info_struct[name] = {
'version': '',
'requires': [],
'reverse': [],
}
def main():
info = PackageInfo().info
ordered_info = OrderedDict(sorted(info.items()))
for key, value in ordered_info.items():
sys.stdout.write('{} ({}):\n'.format(key, value['version']))
sys.stdout.write('- Requires:\n')
for req in value['requires']:
sys.stdout.write(' - {}\n'.format(req))
sys.stdout.write('- Reverse:\n')
for req, version in value['reverse']:
sys.stdout.write(' - {} ({})\n'.format(req, version))
sys.stdout.write('\n')
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment