52 lines
1.6 KiB
Python
Raw Normal View History

2022-08-10 20:32:35 -04:00
import logging
from pip._internal.cli.base_command import Command
2022-08-12 01:34:18 -04:00
from pip._internal.cli.status_codes import ERROR, SUCCESS
2022-08-10 20:32:35 -04:00
from pip._internal.operations.check import (
2022-08-12 01:34:18 -04:00
check_package_set,
create_package_set_from_installed,
2022-08-10 20:32:35 -04:00
)
2022-08-12 01:34:18 -04:00
from pip._internal.utils.misc import write_output
from pip._internal.utils.typing import MYPY_CHECK_RUNNING
2022-08-10 20:32:35 -04:00
logger = logging.getLogger(__name__)
2022-08-12 01:34:18 -04:00
if MYPY_CHECK_RUNNING:
from optparse import Values
from typing import Any, List
2022-08-10 20:32:35 -04:00
class CheckCommand(Command):
"""Verify installed packages have compatible dependencies."""
2022-08-12 01:34:18 -04:00
2022-08-10 20:32:35 -04:00
usage = """
%prog [options]"""
def run(self, options, args):
2022-08-12 01:34:18 -04:00
# type: (Values, List[Any]) -> int
2022-08-10 20:32:35 -04:00
package_set, parsing_probs = create_package_set_from_installed()
missing, conflicting = check_package_set(package_set)
for project_name in missing:
version = package_set[project_name].version
for dependency in missing[project_name]:
2022-08-12 01:34:18 -04:00
write_output(
2022-08-10 20:32:35 -04:00
"%s %s requires %s, which is not installed.",
project_name, version, dependency[0],
)
for project_name in conflicting:
version = package_set[project_name].version
for dep_name, dep_version, req in conflicting[project_name]:
2022-08-12 01:34:18 -04:00
write_output(
2022-08-10 20:32:35 -04:00
"%s %s has requirement %s, but you have %s %s.",
project_name, version, req, dep_name, dep_version,
)
if missing or conflicting or parsing_probs:
2022-08-12 01:34:18 -04:00
return ERROR
2022-08-10 20:32:35 -04:00
else:
2022-08-12 01:34:18 -04:00
write_output("No broken requirements found.")
return SUCCESS