importabcfromtypingimportOptionalfrompip._vendor.pkg_resourcesimportDistributionfrompip._internal.index.package_finderimportPackageFinderfrompip._internal.reqimportInstallRequirementclassAbstractDistribution(metaclass=abc.ABCMeta):"""A base class for handling installable artifacts. The requirements for anything installable are as follows: - we must be able to determine the requirement name (or we can't correctly handle the non-upgrade case). - for packages with setup requirements, we must also be able to determine their requirements without installing additional packages (for the same reason as run-time dependencies) - we must be able to create a Distribution object exposing the above metadata. """def__init__(self,req):# type: (InstallRequirement) -> Nonesuper().__init__()self.req=req@abc.abstractmethoddefget_pkg_resources_distribution(self):# type: () -> Optional[Distribution]raiseNotImplementedError()@abc.abstractmethoddefprepare_distribution_metadata(self,finder,build_isolation):# type: (PackageFinder, bool) -> NoneraiseNotImplementedError()