check.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import logging
  2. from pip.basecommand import Command
  3. from pip.operations.check import check_requirements
  4. from pip.utils import get_installed_distributions
  5. logger = logging.getLogger(__name__)
  6. class CheckCommand(Command):
  7. """Verify installed packages have compatible dependencies."""
  8. name = 'check'
  9. usage = """
  10. %prog [options]"""
  11. summary = 'Verify installed packages have compatible dependencies.'
  12. def run(self, options, args):
  13. dists = get_installed_distributions(local_only=False, skip=())
  14. missing_reqs_dict, incompatible_reqs_dict = check_requirements(dists)
  15. for dist in dists:
  16. key = '%s==%s' % (dist.project_name, dist.version)
  17. for requirement in missing_reqs_dict.get(key, []):
  18. logger.info(
  19. "%s %s requires %s, which is not installed.",
  20. dist.project_name, dist.version, requirement.project_name)
  21. for requirement, actual in incompatible_reqs_dict.get(key, []):
  22. logger.info(
  23. "%s %s has requirement %s, but you have %s %s.",
  24. dist.project_name, dist.version, requirement,
  25. actual.project_name, actual.version)
  26. if missing_reqs_dict or incompatible_reqs_dict:
  27. return 1
  28. else:
  29. logger.info("No broken requirements found.")