o g@sdZddlZddlmZmZmZmZmZmZm Z ddl m Z ddl m Z mZddlmZddlmZddlmZdd lmZeeZGd d d eZee efZe e e fZe e ee fZee eefZee eefZe eefZ e ee fZ!d e ee"ffd dZ# ddedeee$ge"fd e fddZ%deed e!fddZ&deeded ee fddZ'dee ded ee fddZ(dS)z'Validation of dependencies of packages N)CallableDictList NamedTupleOptionalSetTuple) Requirement)NormalizedNamecanonicalize_name))make_distribution_for_install_requirement)get_default_environment)DistributionVersion)InstallRequirementc@s"eZdZUeed<eeed<dS)PackageDetailsversion dependenciesN)__name__ __module__ __qualname__r__annotations__rr rr@/usr/lib/python3/dist-packages/pip/_internal/operations/check.pyrs rreturnc Csi}d}t}|jdddD]2}|j}zt|}t|j|||<Wqttfy@}zt d||d}WYd}~qd}~ww||fS)z3Converts a list of distributions into a PackageSet.Fr) local_onlyskipz%Error parsing requirements for %s: %sTN) r iter_installed_distributionscanonical_namelistiter_dependenciesrrOSError ValueErrorloggerwarning) package_setproblemsenvdistnamererrr!create_package_set_from_installed"s r*r$ should_ignorec Csi}i}|D]_\}}t}t}|r||rq|jD]6}t|j} | |vr=d} |jdur3|j} | r<|| |fq|| j} |j j | ddsR|| | |fq|r]t |t d||<|rgt |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. TN) prereleases)key) itemssetrr r(markerevaluateaddr specifiercontainssortedstr) r$r+missing conflicting package_namepackage_detail missing_depsconflicting_depsreqr(missedrrrrcheck_package_set3s4       r? to_installcs6t\}}t||}t|||t|fdddfS)zeFor checking if the dependency graph would be consistent after installing given requirements cs|vSNr)r( whitelistrrosz)check_install_conflicts..)r+)r*_simulate_installation_of_create_whitelistr?)r@r$_would_be_installedrrBrcheck_install_conflicts`s    rIcCsLt}|D]}t|}|}|j}t|jt|||<||q|S)z=Computes the version of packages after installing to_install.) r/r get_metadata_distributionrrrrrr2)r@r$ installedinst_req abstract_distr'r(rrrrEts rErHcCsLt|}|D]}||vr q||jD]}t|j|vr"||nqq|SrA)r/rr r(r2)rHr$packages_affectedr9r=rrrrFs rFrA))__doc__loggingtypingrrrrrrr"pip._vendor.packaging.requirementsr pip._vendor.packaging.utilsr r pip._internal.distributionsr pip._internal.metadatar pip._internal.metadata.baserpip._internal.req.req_installr getLoggerrr"r PackageSetMissing Conflicting MissingDictConflictingDict CheckResultConflictDetailsboolr*r6r?rIrErFrrrrsT$           -