U .e @sddlmZddlZddlmZddlmZddlmZm Z ddl m Z ddl m Z ddlmZerdd lmZmZdd lmZdd lmZeeZd d ZddZddZddZdS))absolute_importN) FeedParser) pkg_resources) specifiersversion)NoneMetadataError) display_path)MYPY_CHECK_RUNNING)OptionalTuple)Message) DistributioncCs4|dkr dSt|}tdtt|}||kS)a Check if the given Python version matches a "Requires-Python" specifier. :param version_info: A 3-tuple of ints representing a Python major-minor-micro version to check (e.g. `sys.version_info[:3]`). :return: `True` if the given Python version satisfies the requirement. Otherwise, return `False`. :raises InvalidSpecifier: If `requires_python` has an invalid format. NT.)rZ SpecifierSetrparsejoinmapstr)requires_python version_infoZrequires_python_specifierZpython_versionrA/usr/lib/python3.8/site-packages/pip/_internal/utils/packaging.pycheck_requires_pythons  rcCsd}t|tjr&||r&||}n0|dr@d}||}ntdt|jd}|dkrht ||t }| || S)z :raises NoneMetadataError: if the distribution reports `has_metadata()` True but `get_metadata()` returns None. ZMETADATAzPKG-INFOzNo metadata found in %sN) isinstancerZDistInfoDistribution has_metadata get_metadataloggerZwarningrlocationrrZfeedclose)distZ metadata_nameZmetadataZ feed_parserrrrr,s      rcCs&t|}|d}|dk r"t|}|S)z_ Return the "Requires-Python" metadata for a distribution, or None if not present. zRequires-PythonN)rgetr)rZ pkg_info_dictrrrrget_requires_pythonGs  r!cCs2|dr.|dD]}|r|SqdS)NZ INSTALLERr)rZget_metadata_linesstrip)rlinerrr get_installerXs  r$)Z __future__rZloggingZ email.parserrZ pip._vendorrZpip._vendor.packagingrrZpip._internal.exceptionsrZpip._internal.utils.miscrZpip._internal.utils.typingr typingr r Z email.messager Zpip._vendor.pkg_resourcesr Z getLogger__name__rrrr!r$rrrrs