Before Python-3.3, I detected that a module was loaded by a custom loader with hasattr(mod, '__loader__')
.
After Python-3.3, all modules have the __loader__
attribute regardless of being loaded by a custom loader.
Python-2.7, 3.2:
>>> import xml
>>> hasattr(xml, '__loader__')
False
Python-3.3:
>>> import xml
>>> hasattr(xml, '__loader__')
True
>>> xml.__loader__
<_frozen_importlib.SourceFileLoader object at ...>
How do I detect that a module was loaded by a custom loader?
>>> import importlib._bootstrap >>> loader_classes = tuple(x[0] for x in importlib._bootstrap._get_supported_file_loaders()) >>> isinstance(os.__loader__, tuple(loader_classes)) True >>> isinstance(sys.__loader__, tuple(loader_classes)) False >>> sys.__loader__
– Takayuki SHIMIZUKAWA Nov 01 '12 at 00:43