本文由 大侠(AhcaoZhu)原创,转载请声明。
链接: https://blog.csdn.net/Ahcao2008

一图看懂 importlib_metadata 模块:用于提供第三方访问Python包的元数据的库,资料整理+笔记(大全)-LMLPHP

一图看懂 importlib_metadata 模块:用于提供第三方访问Python包的元数据的库,资料整理+笔记(大全)

🧊摘要

🧊模块图

一图看懂 importlib_metadata 模块:用于提供第三方访问Python包的元数据的库,资料整理+笔记(大全)-LMLPHP

importlib_metadata
	importlib_metadata._functools
	importlib_metadata._text
	importlib_metadata._compat
	importlib_metadata._adapters
	importlib_metadata._meta
	importlib_metadata._py39compat
	importlib_metadata._collections
	importlib_metadata._itertools

🧊类关系图

一图看懂 importlib_metadata 模块:用于提供第三方访问Python包的元数据的库,资料整理+笔记(大全)-LMLPHP

◆object
	◆BaseException
		◆Exception
			◆ImportError
				◆ModuleNotFoundError
					importlib_metadata.PackageNotFoundError
	◆dict
		◆collections.defaultdict
			importlib_metadata._collections.FreezableDefaultDict
	◆email.message.Message
		importlib_metadata._adapters.Message
	◆importlib.abc.Finder
		◆importlib.abc.MetaPathFinder
			importlib_metadata.DistributionFinder
				importlib_metadata._compat.NullFinder
					importlib_metadata.MetadataPathFinder
	importlib_metadata.DeprecatedNonAbstract
		importlib_metadata.Distribution
			importlib_metadata.PathDistribution
	importlib_metadata.DeprecatedTuple
		importlib_metadata.EntryPoint
	importlib_metadata.FastPath
	importlib_metadata.FileHash
	importlib_metadata.Lookup
	importlib_metadata.Prepared
	importlib_metadata.Sectioned
	importlib_metadata._compat.NullFinder
	◆pathlib.PurePath
		◆pathlib.PurePosixPath
			importlib_metadata.PackagePath
	◆str
		importlib_metadata._text.FoldedCase
	◆tuple
		importlib_metadata.EntryPoints
		importlib_metadata._collections.Pair
			importlib_metadata._collections.Pair
	◆typing_extensions.Protocol
		importlib_metadata._meta.PackageMetadata
		importlib_metadata._meta.SimplePath

🧊模块全展开

☘️【importlib_metadata】

🔵统计

🔵模块

🌿1 os

🌿2 re

🌿3 abc

🌿4 csv

CSV解析和编写。该模块提供了帮助读取和写入逗号分隔值(CSV)文件的类,并实现了PEP 305描述的接口。

🌿5 sys

🌿6 zipp

🌿7 email

🌿8 inspect

🌿9 pathlib

🌿10 operator

🌿11 textwrap

🌿12 warnings

🌿13 functools

🌿14 itertools

🌿15 posixpath

🌿16 contextlib

🌿17 collections

🌿18 importlib_metadata._functools

🌿19 importlib_metadata._text

🌿20 importlib_metadata._compat

🌿21 importlib_metadata._adapters

🌿22 importlib_metadata._meta

🌿23 importlib_metadata._py39compat

Python 3.8/3.9的兼容层

🌿24 importlib_metadata._collections

🌿25 importlib_metadata._itertools

🔵函数

🌿26 install(cls)

类装饰器,用于在 sys.meta_path 上安装。
将后端口DistributionFinder添加到 sys.meta_path 并尝试禁用stdlib DistributionFinder的查找器功能。

🌿27 pypy_partial(val)

在PyPy下调整局部变量的堆栈级别。
    #327的解决方案。

🌿28 method_cache(method, cache_wrapper=None)

包装lru缓存以支持在对象实例中存储缓存数据。
    抽象通用范例,其中方法在第一次调用时显式保存带下划线前缀的受保护属性并随后返回该属性。
    >>> class MyClass:
    ...     calls = 0
    ...
    ...     @method_cache
    ...     def method(self, value):
    ...         self.calls += 1
    ...         return value
    >>> a = MyClass()
    >>> a.method(3)
    3
    >>> for x in range(75):
    ...     res = a.method(x)
    >>> a.calls
    75

    请注意,表面上的行为将与lru_cache完全相似,只是缓存存储在每个实例上,
    因此一个实例中的值不会刷新另一个实例中的值,并且当删除实例时,该实例的缓存值也会删除。
    >>> b = MyClass()
    >>> for x in range(35):
    ...     res = b.method(x)
    >>> b.calls
    35
    >>> a.method(0)
    0
    >>> a.calls
    75

    注意if方法已经用 ``functools.lru_cache()`` 修饰过了,a.calls 的值应该是76(由于'b'实例刷新了缓存值0).
    使用``.cache_clear()``清除缓存。
    >>> a.method.cache_clear()

    对于尚未调用的方法也是如此。
    >>> c = MyClass()
    >>> c.method.cache_clear()
    可以提供另一个缓存包装器:

    >>> cache = functools.lru_cache(maxsize=2)
    >>> MyClass.method2 = method_cache(lambda self: 3, cache_wrapper=cache)
    >>> a = MyClass()
    >>> a.method2()
    3

    注意-不要随后用另一个装饰器包装方法,例如 ``@property``, 这会改变函数的语义。
    另请[参见](http://code.activestate.com/recipes/577452-a-memoize-decorator-for-instance-methods/)了解另一个实现和附加理由。

🌿29 pass_none(func)

换行函数,如果它的第一个参数是None则不调用。
    >>> print_text = pass_none(print)
    >>> print_text('text')
    text
    >>> print_text(None)

🌿30 always_iterable(obj, base_type=(<class ‘str’>, <class ‘bytes’>))

    如果*obj*是可迭代的,则返回其项上的迭代器。
        >>> obj = (1, 2, 3)
        >>> list(always_iterable(obj))
        [1, 2, 3]
    如果*obj*不可迭代,则返回一个包含*obj*的单项可迭代对象:
        >>> obj = 1
        >>> list(always_iterable(obj))
        [1]
    如果*obj*为``None``,返回一个空可迭代对象:
        >>> obj = None
        >>> list(always_iterable(None))
        []
    默认情况下,二进制字符串和文本字符串不被认为是可迭代的::
        >>> obj = 'foo'
        >>> list(always_iterable(obj))
        ['foo']
    如果设置了*base_type*, ``isinstance(obj, base_type)`` 返回``True``的对象将不被认为是可迭代的。
        >>> obj = {'a': 1}
        >>> list(always_iterable(obj))  # Iterate over the dict's keys
        ['a']
        >>> list(always_iterable(obj, base_type=dict))  # Treat dicts as a unit
        [{'a': 1}]
    将*base_type*设置为 ``None`` 以避免任何特殊处理并将Python认为可迭代的对象视为可迭代的:
        >>> obj = 'foo'
        >>> list(always_iterable(obj, base_type=None))
        ['f', 'o', 'o']

🌿31 unique_everseen(iterable, key=None)

列出唯一的元素,保持顺序。
记住所有见过的元素。

🌿32 import_module(name, package=None)

导入模块。在执行相对导入时需要'package'参数。
它指定要使用的包作为定位点,从该定位点将相对导入解析为绝对导入。

🌿33 cast(typ, val)

将值强制转换为类型。
这将返回不变的值。对于类型检查器,这表明返回值具有指定的类型,但在运行时,我们故意不检查任何内容(我们希望这尽可能快)。

🌿34 distribution(distribution_name) -> importlib_metadata.Distribution

获取命名包的 ``Distribution`` 实例。
    :param distribution_name: 分发包的字符串形式的名称。
    :return: ``Distribution``实例(或其子类)。

🌿35 distributions(**kwargs) -> Iterable[importlib_metadata.Distribution]

获取当前环境中的所有 ``Distribution`` 实例。
    :return: ``Distribution``实例的可迭代对象。

🌿36 metadata(distribution_name) -> importlib_metadata._meta.PackageMetadata

获取命名包的元数据。
    :param distribution_name: 要查询的发行包名称。
    :return: 包含解析元数据的PackageMetadata。

🌿37 version(distribution_name) -> str

获取指定包的版本字符串。
    :param distribution_name: 要查询的发行包名称。
    :return: 在包的“version”元数据键中定义的包的版本字符串。

🌿38 entry_points(**params) -> importlib_metadata.EntryPoints

返回所有已安装包的EntryPoint对象。
传递选择参数(组或名称)以将结果过滤到匹配这些属性的入口点(请参阅EntryPoints.select())。
    :return: 所有安装包的EntryPoints。

🌿39 files(distribution_name) -> Union[List[importlib_metadata.PackagePath], NoneType]

返回指定包的文件列表。
    :param distribution_name: 要查询的发行包名称。
    :return: 组成发行版的文件列表。

🌿40 requires(distribution_name) -> Union[List[str], NoneType]

返回指定包的需求列表。
    :return:    需求的迭代,适合于 packaging.requirement.Requirement 。

🌿41 packages_distributions() -> Mapping[str, List[str]]

返回顶级包到其发行版的映射。
    >>> import collections.abc
    >>> pkgs = packages_distributions()
    >>> all(isinstance(dist, collections.abc.Sequence) for dist in pkgs.values())
    True

🌿42 _top_level_declared(dist)

🌿43 _top_level_inferred(dist)

🔵类

🌿44 importlib_metadata._collections.FreezableDefaultDict

通常,我们希望在缺省字典的初始构造之后防止它的变异,例如在迭代期间防止变异。
    >>> dd = FreezableDefaultDict(list)
    >>> dd[0].append('1')
    >>> dd.freeze()
    >>> dd[1]
    []
    >>> len(dd)
    1

method

🌿45 importlib_metadata._collections.Pair

class method

将函数转换为类方法。

🌿46 importlib_metadata._compat.NullFinder

一个“查找器”(又名“MetaClassFinder”),它永远不会找到任何模块,但可能会找到发行版。

static method

staticmethod(function) -> method将函数转换为静态方法。
staticmethod(function) -> method将函数转换为静态方法。

🌿47 importlib_metadata._meta.PackageMetadata

property

method

当@overload被调用时触发的Helper。
当@overload被调用时触发的Helper。

🌿48 importlib_metadata._meta.SimplePath

pathlib的最小子集。PathDistribution所需的路径。

property

method

🌿49 contextlib.suppress

上下文管理器来抑制指定的异常
    异常被抑制后,继续执行with语句后面的下一条语句。
         with suppress(FileNotFoundError):
             os.remove(somefile)
         # 如果文件已经被删除,执行仍然会继续

🌿50 importlib.abc.MetaPathFinder

导入查找器的抽象基类。元的道路。

method

返回模块的加载器。
    如果没有找到模块,则返回None。全名为str,路径为字符串列表或None。
    此方法自Python 3.4以来已弃用,而支持finder.find_spec()。
    如果find_spec()存在,则为该方法提供向后兼容的功能。
清除查找器缓存(如果有的话)的可选方法。
importlib.invalidate_caches() 使用这个方法。

🌿51 itertools.starmap

starmap(function, sequence) -> starmap object
返回一个迭代器,该迭代器的值是从给定序列的参数元组求值的函数返回的。

🌿52 importlib_metadata.PackageNotFoundError

包裹没有找到。

property

🌿53 importlib_metadata.Sectioned

一个简单的入口点配置解析器,用于性能
    >>> 对于在 Sectioned.read(Sectioned._sample)中的条目:
    ...     print(item)
    Pair(name='sec1', value='# comments ignored')
    Pair(name='sec1', value='a = 1')
    Pair(name='sec1', value='b = 2')
    Pair(name='sec2', value='a = 2')

    >>> res = Sectioned.section_pairs(Sectioned._sample)
    >>> item = next(res)
    >>> item.name
    'sec1'
    >>> item.value
    Pair(name='a', value='1')
    >>> item = next(res)
    >>> item.value
    Pair(name='b', value='2')
    >>> item = next(res)
    >>> item.name
    'sec2'
    >>> item.value
    Pair(name='a', value='2')
    >>> list(res)
    []

static method

staticmethod(function) -> method将函数转换为静态方法。
staticmethod(function) -> method将函数转换为静态方法。

class method

将函数转换为类方法。

🌿54 importlib_metadata.DeprecatedTuple

提供下标项访问以实现向后兼容性。
    >>> recwarn = getfixture('recwarn')
    >>> ep = EntryPoint(name='name', value='value', group='group')
    >>> ep[:]
    ('name', 'value', 'group')
    >>> ep[0]
    'name'
    >>> len(recwarn)
    1

🌿55 importlib_metadata.EntryPoint

一个由Python打包约定定义的入口点。
    有关更多信息,请参阅[入口点的打包文档](https://packaging.python.org/specifications/entry-points/)。
    >>> ep = EntryPoint(name=None, group=None, value='package.module:attr [extra1, extra2]')
    >>> ep.module
    'package.module'
    >>> ep.attr
    'attr'
    >>> ep.extras
    ['extra1', 'extra2']

data

property

method

从入口点的定义加载入口点。
如果该值只指示了一个模块,则返回该模块。否则,返回命名对象。
EntryPoint匹配给定的参数。
        >>> ep = EntryPoint(group='foo', name='bar', value='bing:bong [extra1, extra2]')
        >>> ep.matches(group='foo')
        True
        >>> ep.matches(name='bar', value='bing:bong [extra1, extra2]')
        True
        >>> ep.matches(group='foo', name='other')
        False
        >>> ep.matches()
        True
        >>> ep.matches(extras=['extra1', 'extra2'])
        True
        >>> ep.matches(module='bing')
        True
        >>> ep.matches(attr='bong')
        True

🌿56 importlib_metadata.EntryPoints

可选择的EntryPoint对象的不可变集合。

property

method

从self中选择与给定参数(通常是组和/或名称)匹配的入口点。

🌿57 importlib_metadata.PackagePath

对包中路径的引用

method

返回此路径的类路径对象

🌿58 importlib_metadata.FileHash

🌿59 importlib_metadata.DeprecatedNonAbstract

🌿60 importlib_metadata.Distribution

Python发行包。

property

method

给定此发行版中某个文件的路径,返回该文件的路径。
尝试加载由名称指定的元数据文件。
        :param filename: 发布信息中的文件名称。
        :return: 如果找到则返回文本,否则返回None。

static method

staticmethod(function) -> method将函数转换为静态方法。

class method

将函数转换为类方法。
将函数转换为类方法。

🌿61 importlib_metadata.DistributionFinder

能够发现已安装的发行版的MetaPathFinder。

data

method

找到分布。
    返回一个可迭代对象,包含所有能够加载与 ``context`` 匹配的包的元数据的Distribution实例,一个 DistributionFinder.Context 上下文实例。

🌿62 importlib_metadata.FastPath

为子路径寻找路径的微优化类。
    >>> FastPath('').children()
    ['...']

property

method

🌿63 importlib_metadata.Lookup

method

🌿64 importlib_metadata.Prepared

对可能命名的包的元数据进行有准备的搜索。

data

static method

staticmethod(function) -> method将函数转换为静态方法。
staticmethod(function) -> method将函数转换为静态方法。

🌿65 importlib_metadata.MetadataPathFinder

文件系统上发布包的简并查找器。
此查找器仅为没有PathFinder find_distribution()的Python版本提供find_distribution()方法。

method

找到分布。
    返回一个可迭代对象,其中包含所有能够加载匹配 ``context.name``的包的元数据的分发实例(如果指定``None``,则为所有名称),
    沿着目录 ``context.path`` 列表中的路径。

🌿66 importlib_metadata.PathDistribution

method

尝试加载由名称指定的元数据文件。:param filename::return:
        :param filename: 发布信息中的文件名称。
        :return: 如果找到则返回文本,否则返回None。

🔵私有或局部

🔵剩余

☘️【os】

☘️【re】

☘️【abc】

☘️【csv】

☘️【sys】

☘️【zipp】

☘️【email】

☘️【inspect】

☘️【pathlib】

☘️【operator】

☘️【textwrap】

☘️【warnings】

☘️【functools】

☘️【itertools】

☘️【posixpath】

☘️【contextlib】

☘️【collections】

☘️【importlib_metadata._functools】

☘️【importlib_metadata._text】

☘️【importlib_metadata._compat】

☘️【importlib_metadata._adapters】

☘️【importlib_metadata._meta】

☘️【importlib_metadata._py39compat】

☘️【importlib_metadata._collections】

☘️【importlib_metadata._itertools】

☘️【types】

☘️【platform】

05-26 08:56