Setuptools: [Forward compatibility][BUG] `pkg_resources.extern.VendorImporter` lacks `exec_module()` method

Created on 11 Dec 2020  Â·  8Comments  Â·  Source: pypa/setuptools

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.

Needs Implementation bug help wanted

All 8 comments

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.

Was this page helpful?
0 / 5 - 0 ratings