Prima di Python-3.3, ho rilevato che un modulo è stato caricato da un caricatore personalizzato con hasattr(mod, '__loader__')
. Dopo Python-3.3, tutti i moduli hanno l'attributo __loader__
indipendentemente dal fatto che vengano caricati da un caricatore personalizzato.Python - Come si rileva che un modulo è stato caricato dal caricatore personalizzato?
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 ...>
Come faccio a rilevare che un modulo è stato caricato da un caricatore personalizzato?
Grazie. Nel mio caso, non riesco a ottenere l'elenco CUSTOM_LOADERS in anticipo. STANDARD_LOADERS è migliore, ma è un po 'difficile da preparare nella procedura standard.
>>> 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__
–Penso che 'STANDARD_LOADERS = file_loaders + (BuiltinImporter + FrozenImporter + zipimporter)'. –