a lj @ s d dl Z d dlZd dlmZ d dlmZ d dlmZmZ d dl m Z d dlmZm Z d dlmZ d dlmZ d d lmZ d d lmZ eeZee eedf edd dZeedddZeedddZe jddeedddZ dS ) N)Message) FeedParser)OptionalTuple) pkg_resources) specifiersversionRequirement)Distribution)NoneMetadataError)display_path.)requires_pythonversion_inforeturnc C s4 | du rdS t | }tdtt|}||v S )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.)r ZSpecifierSetr parsejoinmapstr)r r Zrequires_python_specifierZpython_version r A/usr/lib/python3.9/site-packages/pip/_internal/utils/packaging.pycheck_requires_python s r )distr c C s d}t | tjr&| |r&| |}n0| dr@d}| |}ntdt| j d}|du rht | |t }|| | S )z :raises NoneMetadataError: if the distribution reports `has_metadata()` True but `get_metadata()` returns None. ZMETADATAzPKG-INFOzNo metadata found in %s N) isinstancer ZDistInfoDistributionhas_metadataget_metadataloggerZwarningr locationr r Zfeedclose)r Z metadata_namemetadataZfeed_parserr r r r ) s r c C s2 | dr.| dD ]}| r| S qdS )NZ INSTALLERr )r Zget_metadata_linesstrip)r liner r r get_installerD s r$ i )maxsize) req_stringr c C s t | S )z5Construct a packaging.Requirement object with cachingr )r&