Trước Python-3.3, tôi phát hiện thấy một mô-đun đã được tải bởi trình tải tùy chỉnh với hasattr(mod, '__loader__')
. Sau Python-3.3, tất cả các mô-đun có thuộc tính __loader__
bất kể được tải bởi trình tải tùy chỉnh.Python - Làm cách nào để bạn phát hiện thấy một mô-đun đã được tải bởi trình tải tùy chỉnh?
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 ...>
Làm thế nào để phát hiện rằng một mô-đun được nạp bởi một bộ nạp tùy chỉnh?
Cảm ơn. Trong trường hợp của tôi, tôi không thể có được danh sách CUSTOM_LOADERS trước. STANDARD_LOADERS là tốt hơn, nhưng nó là hơi khó khăn để chuẩn bị trong thủ tục tiêu chuẩn.
>>> 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__
–Tôi nghĩ 'STANDARD_LOADERS = file_loaders + (BuiltinImporter + FrozenImporter + zipimporter)'. –