Skip to content

Commit 0972cf5

Browse files
committed
gh-103624: Let pydoc first try to get version from importlib.metadata
1 parent da2273f commit 0972cf5

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

Lib/pydoc.py

+11-4
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ class or function within a module or module in a package. If the
5959
import importlib._bootstrap
6060
import importlib._bootstrap_external
6161
import importlib.machinery
62+
import importlib.metadata
6263
import importlib.util
6364
import inspect
6465
import io
@@ -183,6 +184,14 @@ def _getdoc(object):
183184
return None
184185
return inspect.cleandoc(doc)
185186

187+
def _getversion(mod, name):
188+
try:
189+
return importlib.metadata.version(name)
190+
except importlib.metadata.PackageNotFoundError:
191+
if version := getattr(mod, '__version__', ''):
192+
return str(version)
193+
return None
194+
186195
def getdoc(object):
187196
"""Get the doc string or comments for an object."""
188197
result = _getdoc(object) or inspect.getcomments(object)
@@ -766,8 +775,7 @@ def docmodule(self, object, name=None, mod=None, *ignored):
766775
except TypeError:
767776
filelink = '(built-in)'
768777
info = []
769-
if hasattr(object, '__version__'):
770-
version = str(object.__version__)
778+
if version := _getversion(object, name):
771779
if version[:11] == '$' + 'Revision: ' and version[-1:] == '$':
772780
version = version[11:-1].strip()
773781
info.append('version %s' % self.escape(version))
@@ -1286,8 +1294,7 @@ def docmodule(self, object, name=None, mod=None):
12861294
contents.append(self.docother(value, key, name, maxlen=70))
12871295
result = result + self.section('DATA', '\n'.join(contents))
12881296

1289-
if hasattr(object, '__version__'):
1290-
version = str(object.__version__)
1297+
if version := _getversion(object, name):
12911298
if version[:11] == '$' + 'Revision: ' and version[-1:] == '$':
12921299
version = version[11:-1].strip()
12931300
result = result + self.section('VERSION', version)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Let pydoc first try to get package's version from ``importlib.metadata``,
2+
then falling back to ``__version__`` attribute.

0 commit comments

Comments
 (0)