importlib-metadata
importlib-metadata provides third-party access to the functionality of the stdlib importlib.metadata module, including features backported from future Python versions. It allows reading installed package metadata such as version strings, entry points, file lists, and requirements. Current version is 9.0.0 (requires Python >=3.10). New features are introduced here first and later merged into CPython; releases track CPython closely with frequent minor/patch releases.
Warnings
- breaking entry_points() no longer returns a dict. Since v5.0 it always returns an EntryPoints object. Code like entry_points()['console_scripts'] raises a TypeError.
- breaking EntryPoint objects lost their tuple-like interface (__getitem__). Code that unpacked EntryPoints as tuples (e.g. name, ep = entry_point) fails silently or raises TypeError.
- breaking metadata(pkg)['Missing-Key'] now raises KeyError instead of returning None. Previously absent keys silently returned None.
- breaking Distribution subclasses that do not implement all abstract methods now raise errors. Deprecated compatibility shim was removed.
- gotcha version() and metadata() operate on distribution package names (e.g. 'Pillow'), NOT import names (e.g. 'PIL'). They are frequently different and do not map 1-to-1.
- gotcha importlib_metadata does not support stdlib modules or packages installed without dist-info/egg-info metadata. Calling version('os') raises PackageNotFoundError.
- deprecated On Python >=3.12 the stdlib importlib.metadata already incorporates features up to approximately importlib_metadata 5.x. For on-the-bleeding-edge features only, install the backport; otherwise prefer the stdlib to reduce dependencies.
Install
-
pip install importlib-metadata
Imports
- version
from importlib_metadata import version
- PackageNotFoundError
from importlib_metadata import PackageNotFoundError
- entry_points
from importlib_metadata import entry_points eps = entry_points(group='console_scripts')
- packages_distributions
from importlib_metadata import packages_distributions
- Distribution
from importlib_metadata import Distribution dist = Distribution.from_name('pip')
Quickstart
from importlib_metadata import version, metadata, entry_points, packages_distributions, PackageNotFoundError
# Get version string
try:
ver = version('pip')
print(f'pip version: {ver}')
except PackageNotFoundError:
print('pip is not installed')
# Read metadata fields
meta = metadata('pip')
print('Author:', meta['Author-email'])
print('Requires-Python:', meta['Requires-Python'])
# List console_scripts entry points (v5.0+ API)
eps = entry_points(group='console_scripts')
for ep in eps:
print(f' {ep.name} -> {ep.value}')
# Map import names to distribution names
pkg_to_dist = packages_distributions()
print('importlib_metadata dist(s):', pkg_to_dist.get('importlib_metadata'))