本文由 大侠(AhcaoZhu)原创,转载请声明。
链接: https://blog.csdn.net/Ahcao2008
一图看懂 importlib_metadata 模块:用于提供第三方访问Python包的元数据的库,资料整理+笔记(大全)
- 🧊摘要
- 🧊模块图
- 🧊类关系图
- 🧊模块全展开
- ☘️【importlib_metadata】
- 🔵统计
- 🔵模块
- 🌿1 os
- 🌿2 re
- 🌿3 abc
- 🌿4 csv
- 🌿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
- 🌿24 importlib_metadata._collections
- 🌿25 importlib_metadata._itertools
- 🔵函数
- 🌿26 install(cls)
- 🌿27 pypy_partial(val)
- 🌿28 method_cache(method, cache_wrapper=None)
- 🌿29 pass_none(func)
- 🌿30 always_iterable(obj, base_type=(<class 'str'>, <class 'bytes'>))
- 🌿31 unique_everseen(iterable, key=None)
- 🌿32 import_module(name, package=None)
- 🌿33 cast(typ, val)
- 🌿34 distribution(distribution_name) -> importlib_metadata.Distribution
- 🌿35 distributions(**kwargs) -> Iterable[importlib_metadata.Distribution]
- 🌿36 metadata(distribution_name) -> importlib_metadata._meta.PackageMetadata
- 🌿37 version(distribution_name) -> str
- 🌿38 entry_points(**params) -> importlib_metadata.EntryPoints
- 🌿39 files(distribution_name) -> Union[List[importlib_metadata.PackagePath], NoneType]
- 🌿40 requires(distribution_name) -> Union[List[str], NoneType]
- 🌿41 packages_distributions() -> Mapping[str, List[str]]
- 🌿42 _top_level_declared(dist)
- 🌿43 _top_level_inferred(dist)
- 🔵类
- 🌿44 importlib_metadata._collections.FreezableDefaultDict
- 🌿45 importlib_metadata._collections.Pair
- 🌿46 importlib_metadata._compat.NullFinder
- 🌿47 importlib_metadata._meta.PackageMetadata
- 🌿48 importlib_metadata._meta.SimplePath
- 🌿49 contextlib.suppress
- 🌿50 importlib.abc.MetaPathFinder
- 🌿51 itertools.starmap
- 🌿52 importlib_metadata.PackageNotFoundError
- 🌿53 importlib_metadata.Sectioned
- 🌿54 importlib_metadata.DeprecatedTuple
- 🌿55 importlib_metadata.EntryPoint
- 🌿56 importlib_metadata.EntryPoints
- 🌿57 importlib_metadata.PackagePath
- 🌿58 importlib_metadata.FileHash
- 🌿59 importlib_metadata.DeprecatedNonAbstract
- 🌿60 importlib_metadata.Distribution
- 🌿61 importlib_metadata.DistributionFinder
- 🌿62 importlib_metadata.FastPath
- 🌿63 importlib_metadata.Lookup
- 🌿64 importlib_metadata.Prepared
- 🌿65 importlib_metadata.MetadataPathFinder
- 🌿66 importlib_metadata.PathDistribution
- 🔵私有或局部
- 🔵剩余
- ☘️【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】
🧊摘要
🧊模块图
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
🧊类关系图
◆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。