Last active
September 11, 2017 00:27
-
-
Save JBKahn/0731719c8f936eb6dad5cba428d85e79 to your computer and use it in GitHub Desktop.
Piprot for use with another index url
This file contains 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
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 |
This file contains 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
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