Nick Coghlan added the comment: Sorry, I got the levels slightly confused there - a bit more experimentation shows it isn't the parent package that needs a __spec__ attribute, but only the package being executed.
# Parent package needs __path__ rather than __spec__ >>> find_spec("unittest.mock") ModuleSpec(name='unittest.mock', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7fa7b6434b38>, origin='/usr/lib64/python3.5/unittest/mock.py') >>> sys.modules["unittest"] = object() >>> find_spec("unittest.mock") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib64/python3.5/importlib/util.py", line 89, in find_spec return _find_spec(fullname, parent.__path__) AttributeError: 'object' object has no attribute '__path__' # Leaf package needs __spec__ >>> del sys.modules["unittest"] >>> find_spec("unittest.mock") ModuleSpec(name='unittest.mock', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7fa7b64344e0>, origin='/usr/lib64/python3.5/unittest/mock.py') >>> import unittest.mock >>> del sys.modules["unittest.mock"].__spec__ >>> find_spec("unittest.mock") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib64/python3.5/importlib/util.py", line 99, in find_spec raise ValueError('{}.__spec__ is not set'.format(name)) from None ValueError: unittest.mock.__spec__ is not set ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue27487> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com