d
        def at(path: Union[str, os.PathLike[str]]) -> PathDistribution: ...
        @property
        def metadata(self) -> Message: ...
        @property
        def version(self) -> str: ...
        @property
        def entry_points(self) -> List[EntryPoint]: ...
        @property
        def files(self) -> Optional[List[PackagePath]]: ...
        @property
        def requires(self) -> Optional[List[str]]: ...
    class DistributionFinder(MetaPathFinder):
        class Context:
            name: Optional[str]
            def __init__(self, *, name: Optional[str] = ..., path: List[str] = ..., **kwargs: Any) -> None: ...
            @property
            def path(self) -> List[str]: ...
            @property
            def pattern(self) -> str: ...
        @abc.abstractmethod
        def find_distributions(self, context: Context = ...) -> Iterable[Distribution]: ...
    class MetadataPathFinder(DistributionFinder):
        @classmethod
        def find_distributions(cls, context: DistributionFinder.Context = ...) -> Iterable[PathDistribution]: ...
    class PathDistribution(Distribution):
        def __init__(self, path: Path) -> None: ...
        def read_text(self, filename: Union[str, os.PathLike[str]]) -> str: ...
        def locate_file(self, path: Union[str, os.PathLike[str]]) -> os.PathLike[str]: ...
    def distribution(distribution_name: str) -> Distribution: ...
    @overload
    def distributions(*, context: DistributionFinder.Context) -> Iterable[Distribution]: ...
    @overload
    def distributions(
        *, context: None = ..., name: Optional[str] = ..., path: List[str] = ..., **kwargs: Any
    ) -> Iterable[Distribution]: ...
    def metadata(distribution_name: str) -> Message: ...
    def version(distribution_name: str) -> str: ...
    def entry_points() -> Dict[str, Tuple[EntryPoint, ...]]: ...
    def files(distribution_name: str) -> Optional[List[PackagePath]]: ...
    def requires(distribution_name: str) -> Optional[List[str]]: ...
PK