U .e@s dZddlZddlmZddlmZddlmZddlm Z ddl m Z ddl m Z eeZe rdd lmZdd lmZmZmZmZmZmZmZeed fZeeefZeeeefZeeeefZeeeefZ eee fZ!ed d d gZ"ddZ#dddZ$ddZ%ddZ&ddZ'dS)z'Validation of dependencies of packages N) namedtuple)canonicalize_name)RequirementParseError))make_distribution_for_install_requirement)get_installed_distributions)MYPY_CHECK_RUNNING)InstallRequirement)AnyCallableDictOptionalSetTupleListPackageDetailsversionrequiresc Ks|ikrddd}i}d}tf|D]\}t|j}zt|j|||<Wq$tk r~}ztd||d}W5d}~XYq$Xq$||fS)z8Converts a list of distributions into a PackageSet. F)Z local_onlyskipz%Error parsing requirements for %s: %sTN) rr project_namerrrrloggingZwarning)kwargs package_setZproblemsdistnameerrB/usr/lib/python3.8/site-packages/pip/_internal/operations/check.py!create_package_set_from_installed(s  rc Cs|dkrdd}i}i}|D]}t}t}||r6q||jD]l}t|j}||krd} |jdk rn|j} | r@|||fq@||j} |jj | dds@||| |fq@|rt |t d||<|rt |t d||<q||fS)zCheck if a package set is consistent If should_ignore is passed, it should be a callable that takes a package name and returns a boolean. NcSsdS)NFrrrrr should_ignoreEsz(check_package_set..should_ignoreT)Z prereleases)key) setrrrZmarkerZevaluateaddrZ specifiercontainssortedstr) rrZmissingZ conflicting package_nameZ missing_depsZconflicting_depsreqrZmissedrrrrcheck_package_set=s4    r(cs6t\}}t||}t|||t|fdddfS)zeFor checking if the dependency graph would be consistent after installing given requirements cs|kSNrrZ whitelistrr|z)check_install_conflicts..)r)r_simulate_installation_of_create_whitelistr() to_installr_would_be_installedrr*rcheck_install_conflictsls    r2cCsLt}|D]<}t|}|}t|j}t|j|||<||q |S)zBComputes the version of packages after installing to_install. ) r!rZget_pkg_resources_distributionrr rrrr")r/rZ installedZinst_reqZ abstract_distrrrrrr-s  r-cCsLt|}|D]:}||krq ||jD] }t|j|kr$||q q$q |Sr))r!rrrr")r1rZpackages_affectedr&r'rrrr.s r.)N)(__doc__r collectionsrZpip._vendor.packaging.utilsrZpip._vendor.pkg_resourcesrZpip._internal.distributionsrZpip._internal.utils.miscrZpip._internal.utils.typingrZ getLogger__name__ZloggerZpip._internal.req.req_installrtypingr r r r r rrr%Z PackageSetZMissingZ ConflictingZ MissingDictZConflictingDictZ CheckResultrrr(r2r-r.rrrrs.        $    /