This causes an ImportWarning that effectively explodes in envs with a strict warning handling (filterwarnings = error) — like pytest — under Python 3.10-dev that ships setuptools v47.1.0. But I checked that the importer is still missing that method.
The simple repro is:
$ python3.10 -W error -c 'import pkg_resources'
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "~/.pyenv/versions/3.10-dev/lib/python3.10/site-packages/pkg_resources/__init__.py", line 57, in <module>
from pkg_resources.extern import six
File "<frozen importlib._bootstrap>", line 1026, in _find_and_load
File "<frozen importlib._bootstrap>", line 1005, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 681, in _load_unlocked
ImportWarning: VendorImporter.exec_module() not found; falling back to load_module()
Example failure: https://github.com/cherrypy/cheroot/runs/1533924692?check_suite_focus=true#step:14:226.
Ignoring the warning in this module reveals another warning like that originating from pkg_resources._vendor.six._SixMetaPathImporter:
$ python3.10 -W error -W 'ignore:VendorImporter.exec_module() not found; falling back to load_module():ImportWarning' -c 'import pkg_resources'
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "~/.pyenv/versions/3.10-dev/lib/python3.10/site-packages/pkg_resources/__init__.py", line 58, in <module>
from pkg_resources.extern.six.moves import map, filter
File "<frozen importlib._bootstrap>", line 1026, in _find_and_load
File "<frozen importlib._bootstrap>", line 1005, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 682, in _load_unlocked
File "<frozen importlib._bootstrap>", line 642, in _load_backward_compatible
File "~/.pyenv/versions/3.10-dev/lib/python3.10/site-packages/pkg_resources/extern/__init__.py", line 43, in load_module
__import__(extant)
File "<frozen importlib._bootstrap>", line 1026, in _find_and_load
File "<frozen importlib._bootstrap>", line 1005, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 681, in _load_unlocked
ImportWarning: _SixMetaPathImporter.exec_module() not found; falling back to load_module()
Apparently, @brettcannon has already reported the same thing to six 3 weeks ago: https://github.com/benjaminp/six/issues/341.
Interesting observation: I normally ignore specific warnings with a module-level restriction that filterwarnings allows but it doesn't work for these dynamically injected modules. And so I'm forced to apply a more broad ignore. This sounds like something CPython could attempt to fix on their side...
Root cause: the original deprecation got introduced in CPython via https://bugs.python.org/issue26131 and https://github.com/python/cpython/pull/23469.
Ignoring the warning in this module reveals another warning like that originating from
pkg_resources._vendor.six._SixMetaPathImporter:
This part looks irrelevant to master because six seems to have been removed about 4 months ago.
This breaks many other packages, including pytest, jinja2. See https://bugzilla.redhat.com/showdependencytree.cgi?id=1911607&hide_resolved=0
I've drafted https://github.com/pypa/setuptools/pull/2517 but I am sure that's not the correct path froward.