5

Python-3.3 より前のバージョンでは、モジュールがカスタム ローダーによってロードされたことを検出しましたhasattr(mod, '__loader__')__loader__Python-3.3 以降では、カスタム ローダーによってロードされるかどうかに関係なく、すべてのモジュールが属性を持ちます。

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 ...>

モジュールがカスタム ローダーによってロードされたことを検出するにはどうすればよいですか?

4

1 に答える 1

1

Python 3.3では、属性の存在を簡単にチェックする__loader__だけでは不十分です。PEP 302では、すべてのローダーが__loader__モジュールの属性に情報を保存する必要があります。

type(module.__loader__)モジュールが検索しているカスタムローダー(またはローダーのリスト)でロードされたかどうかを確認するための追加のチェックを追加します。

>>> CUSTOM_LOADERS = [MyCustomLoader1, MyCustomLoader2]
>>> type(xml.__loader__) in CUSTOM_LOADERS
True

これは、カスタムローダーのリストを最新の状態に保つ必要があるという点で、メンテナンスの観点からは悪い場合があります。別の同様のアプローチは、標準の組み込みローダーのリストを作成し、チェックをnot inSTANDARD_LOADERSに変更することです。ただし、これにはまだメンテナンスの問題があります。

于 2012-10-31T20:51:40.353 に答える