モジュールをインポートするときに、どのインポートが行われているかを追跡したいと考えています。(目標は、有害なモジュールのインポートを禁止することですが、それはこの質問のポイントではありません。) MCVE の目的のために、次のようにするとします。
import builtins
orig_import = builtins.__import__
def new_import(*args, **kwargs):
print(args[0])
return orig_import(*args, **kwargs)
builtins.__import__ = new_import
import my_module
Python ≤ 3.7 では、これは期待どおりに機能し、インポートするすべてのモジュール(およびこれらのモジュールがインポートするすべてmy_module
のモジュールを再帰的に) と同様に出力します。my_module
ただし、Python 3.8.0 では、何もインポートしなくても次の出力が得られます。 my_module
my_module
_io
_io
2つの_io
行はどこから来たのですか?ドキュメントを調べてみましたが、役立つものは見つかりませんでした。