Skip to content

Instantly share code, notes, and snippets.

@JBKahn
Last active September 11, 2017 00:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JBKahn/0731719c8f936eb6dad5cba428d85e79 to your computer and use it in GitHub Desktop.
Save JBKahn/0731719c8f936eb6dad5cba428d85e79 to your computer and use it in GitHub Desktop.
Piprot for use with another index url
import argparse
import pip
from piptools.repositories.pypi import PyPIRepository
from piptools.resolver import Resolver
from piptools.scripts.compile import get_pip_command
def print_rotten_packages(file_path, extra_index_url):
pip_command = get_pip_command()
pip_args = []
if extra_index_url:
pip_args.extend(['-i', extra_index_url])
pip_options, _ = pip_command.parse_args(pip_args)
pypi = PyPIRepository(pip_options=pip_options, session=pip._vendor.requests)
requirements = [
(requirement.name, pip.utils.get_installed_version(requirement.name))
for requirement in pip.req.parse_requirements(file_path, session=1)
]
constraints = []
for requirement in requirements:
constraints.append(pip.req.InstallRequirement.from_line(requirement[0]))
resolver = Resolver(constraints=constraints, repository=pypi)
resolved_tree = resolver.resolve()
known_latest_versions = {result.name: max(result.req.specifier._specs).version for result in resolved_tree}
for req, version in requirements:
if req not in known_latest_versions:
print("No idea about {}".format(req)) # noqa
elif version == known_latest_versions[req]:
print("{} is up to date".format(req)) # noqa
else:
print("{} is rotten with {} installed instead of {}".format(req, version, known_latest_versions[req])) # noqa
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('-fp', '--file-path', help='path to a requirements file', required=True)
parser.add_argument('-e', '--extra_index_url', help='path to a requirements file', required=False, default=None)
args = parser.parse_args()
print_rotten_packages(args.file_path, args.extra_index_url)
print("It compares against the installed version rather than the version in the file.") # noqa
pip==9.0.1
pip-tools==1.9.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment