Skip to content

Commit d68d5eb

Browse files
committed
Replace importlib_metadata with importlib.metadata on Python 3.8+
Fixes #5537
1 parent 4f9bf02 commit d68d5eb

File tree

7 files changed

+38
-16
lines changed

7 files changed

+38
-16
lines changed

changelog/5537.bugfix.rst

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Replace ``importlib_metadata`` backport with ``importlib.metadata`` from the
2+
standard library on Python 3.8+.

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
'pathlib2>=2.2.0;python_version<"3.6"',
1212
'colorama;sys_platform=="win32"',
1313
"pluggy>=0.12,<1.0",
14-
"importlib-metadata>=0.12",
14+
'importlib-metadata>=0.12;python_version<"3.8"',
1515
"wcwidth",
1616
]
1717

src/_pytest/config/__init__.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import warnings
1010
from functools import lru_cache
1111

12-
import importlib_metadata
1312
import py
1413
from packaging.version import Version
1514
from pluggy import HookimplMarker
@@ -29,6 +28,11 @@
2928
from _pytest.outcomes import Skipped
3029
from _pytest.warning_types import PytestConfigWarning
3130

31+
if sys.version_info >= (3, 8):
32+
from importlib import metadata
33+
else:
34+
import importlib_metadata as metadata
35+
3236
hookimpl = HookimplMarker("pytest")
3337
hookspec = HookspecMarker("pytest")
3438

@@ -772,7 +776,7 @@ def _mark_plugins_for_rewrite(self, hook):
772776

773777
package_files = (
774778
str(file)
775-
for dist in importlib_metadata.distributions()
779+
for dist in metadata.distributions()
776780
if any(ep.group == "pytest11" for ep in dist.entry_points)
777781
for file in dist.files or []
778782
)

testing/acceptance_test.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,17 @@
44
import types
55

66
import attr
7-
import importlib_metadata
87
import py
98

109
import pytest
1110
from _pytest.main import ExitCode
1211
from _pytest.warnings import SHOW_PYTEST_WARNINGS_ARG
1312

13+
if sys.version_info >= (3, 8):
14+
from importlib import metadata
15+
else:
16+
import importlib_metadata as metadata
17+
1418

1519
def prepend_pythonpath(*dirs):
1620
cur = os.getenv("PYTHONPATH")
@@ -137,7 +141,7 @@ class DummyDist:
137141
def my_dists():
138142
return (DummyDist(entry_points),)
139143

140-
monkeypatch.setattr(importlib_metadata, "distributions", my_dists)
144+
monkeypatch.setattr(metadata, "distributions", my_dists)
141145
params = ("-p", "mycov") if load_cov_early else ()
142146
testdir.runpytest_inprocess(*params)
143147
if load_cov_early:

testing/test_assertion.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,11 @@ def check(values, value):
172172
return check
173173
""",
174174
"mainwrapper.py": """\
175-
import pytest, importlib_metadata
175+
import pytest, sys
176+
if sys.version_info >= (3, 8):
177+
from importlib import metadata
178+
else:
179+
import importlib_metadata as metadata
176180
177181
class DummyEntryPoint(object):
178182
name = 'spam'
@@ -192,7 +196,7 @@ class DummyDistInfo(object):
192196
def distributions():
193197
return (DummyDistInfo(),)
194198
195-
importlib_metadata.distributions = distributions
199+
metadata.distributions = distributions
196200
pytest.main()
197201
""",
198202
"test_foo.py": """\

testing/test_config.py

+10-7
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import sys
22
import textwrap
33

4-
import importlib_metadata
5-
64
import _pytest._code
75
import pytest
86
from _pytest.config import _iter_rewritable_modules
@@ -12,6 +10,11 @@
1210
from _pytest.config.findpaths import getcfg
1311
from _pytest.main import ExitCode
1412

13+
if sys.version_info >= (3, 8):
14+
from importlib import metadata
15+
else:
16+
import importlib_metadata as metadata
17+
1518

1619
class TestParseIni:
1720
@pytest.mark.parametrize(
@@ -540,7 +543,7 @@ class Dist:
540543
def my_dists():
541544
return (Dist,)
542545

543-
monkeypatch.setattr(importlib_metadata, "distributions", my_dists)
546+
monkeypatch.setattr(metadata, "distributions", my_dists)
544547
testdir.makeconftest(
545548
"""
546549
pytest_plugins = "mytestplugin",
@@ -570,7 +573,7 @@ class Distribution:
570573
def distributions():
571574
return (Distribution(),)
572575

573-
monkeypatch.setattr(importlib_metadata, "distributions", distributions)
576+
monkeypatch.setattr(metadata, "distributions", distributions)
574577
with pytest.raises(ImportError):
575578
testdir.parseconfig()
576579

@@ -594,7 +597,7 @@ class Distribution:
594597
def distributions():
595598
return (Distribution(),)
596599

597-
monkeypatch.setattr(importlib_metadata, "distributions", distributions)
600+
monkeypatch.setattr(metadata, "distributions", distributions)
598601
testdir.parseconfig()
599602

600603

@@ -619,7 +622,7 @@ class Distribution:
619622
def distributions():
620623
return (Distribution(),)
621624

622-
monkeypatch.setattr(importlib_metadata, "distributions", distributions)
625+
monkeypatch.setattr(metadata, "distributions", distributions)
623626
args = ("-p", "no:mytestplugin") if block_it else ()
624627
config = testdir.parseconfig(*args)
625628
config.pluginmanager.import_plugin("mytestplugin")
@@ -655,7 +658,7 @@ def distributions():
655658
return (Distribution(),)
656659

657660
monkeypatch.setenv("PYTEST_DISABLE_PLUGIN_AUTOLOAD", "1")
658-
monkeypatch.setattr(importlib_metadata, "distributions", distributions)
661+
monkeypatch.setattr(metadata, "distributions", distributions)
659662
monkeypatch.setitem(sys.modules, "mytestplugin", PseudoPlugin())
660663
config = testdir.parseconfig(*parse_args)
661664
has_loaded = config.pluginmanager.get_plugin("mytestplugin") is not None

testing/test_entry_points.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
1-
import importlib_metadata
1+
import sys
2+
3+
if sys.version_info >= (3, 8):
4+
from importlib import metadata
5+
else:
6+
import importlib_metadata as metadata
27

38

49
def test_pytest_entry_points_are_identical():
5-
dist = importlib_metadata.distribution("pytest")
10+
dist = metadata.distribution("pytest")
611
entry_map = {ep.name: ep for ep in dist.entry_points}
712
assert entry_map["pytest"].value == entry_map["py.test"].value

0 commit comments

Comments
 (0)