Przed Python-3.3 wykryłem, że moduł został załadowany przez niestandardowy program ładujący z hasattr(mod, '__loader__')
. Po wersji Python-3.3 wszystkie moduły mają atrybut __loader__
, niezależnie od tego, czy zostały załadowane przez niestandardowy program ładujący.Python - Jak można wykryć, że moduł został załadowany przez niestandardowy program ładujący?
Pythona 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 ...>
Jak wykryć, że moduł został załadowany przez ładowaczem niestandardowej?
Dzięki. W moim przypadku nie mogę wcześniej uzyskać listy CUSTOM_LOADERS. STANDARD_LOADERS jest lepszy, ale przygotowanie standardowej procedury jest nieco trudniejsze.
>>> 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__
–Myślę, że 'STANDARD_LOADERS = file_loaders + (BuiltinImporter + FrozenImporter + zipimporter)'. –