3 Rex@s,dZddlZddlmZddlmZddlmZddlm Z ddl m Z ddl m Z ejeZe rdd lmZdd lmZmZmZmZmZmZmZeed fZeeefZeeeefZeeeefZeeeefZ eee fZ!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)AnyCallableDictOptionalSetTupleListPackageDetailsversionrequirescKs|ikrdfd}i}d}xntf|D]`}t|j}yt|j|j||<Wq&ttfk r}ztj d||d}WYdd}~Xq&Xq&W||fS)z8Converts a list of distributions into a PackageSet. F) local_onlyskipz%Error parsing requirements for %s: %sTN) rr project_namerrrOSErrorrloggerwarning)kwargs package_setproblemsdistnameer/builddir/build/BUILDROOT/alt-python36-pip-20.2.4-5.el9.x86_64/opt/alt/python36/lib/python3.6/site-packages/pip/_internal/operations/check.py!create_package_set_from_installed%s  r!c Csi}i}x|D]}t}t}|r,||r,qxz||jD]l}t|j}||krzd} |jdk rf|jj} | r8|j||fq8||j} |jj | dds8|j|| |fq8W|rt |t d||<|rt |t d||<qW||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) setrrrmarkerevaluateaddr specifiercontainssortedstr) r should_ignoremissing conflicting package_name missing_depsconflicting_depsreqrmissedrrrr check_package_set:s0      r4cs6t\}}t||}t|||t|fdddfS)zeFor checking if the dependency graph would be consistent after installing given requirements cs|kS)Nr)r) whitelistrr vsz)check_install_conflicts..)r,)r!_simulate_installation_of_create_whitelistr4) to_installr_would_be_installedr)r5r check_install_conflictsfs    r<cCs\t}xP|D]H}t|}|j}|dk s,tt|j}t|j|j||<|j |q W|S)zBComputes the version of packages after installing to_install. N) r$rget_pkg_resources_distributionAssertionErrorrr#rrrr')r9r installedinst_req abstract_distrrrrr r7{s   r7cCsRt|}xD|D]<}||krqx,||jD]}t|j|kr(|j|Pq(WqW|S)N)r$rrrr')r;rpackages_affectedr/r2rrr r8s   r8)N))__doc__logging collectionsrZpip._vendor.packaging.utilsrZpip._vendor.pkg_resourcesrpip._internal.distributionsrpip._internal.utils.miscrpip._internal.utils.typingr getLogger__name__rZpip._internal.req.req_installrtypingr r r r r rrr+Z PackageSetZMissingZ ConflictingZ MissingDictZConflictingDictZ CheckResultZConflictDetailsrr!r4r<r7r8rrrr s0        $     ,