import sys
from importlib.abc import MetaPathFinder
from typing import List
class BlockImportFinder(MetaPathFinder):
def __init__(self, blocked_modules: List[str]):
self.blocked_modules = set(blocked_modules)
def find_spec(self, fullname, path, target=None):
# 完全修飾名とサブモジュールもブロック
for blocked in self.blocked_modules:
if fullname == blocked or fullname.startswith(blocked + "."):
raise ImportError(f"Importing '{fullname}' is blocked.")
return None # 他のファインダーに処理を委ねる
def block_imports(blocked_modules: List[str]) -> BlockImportFinder:
"""
指定されたモジュールのインポートをブロックするインポートファインダーを追加します。
Args:
blocked_modules (List[str]): ブロックしたいモジュール名のリスト。
Returns:
BlockImportFinder: 追加されたカスタムファインダーのインスタンス。
"""
finder = BlockImportFinder(blocked_modules)
sys.meta_path.insert(0, finder) # 優先度を高くするために先頭に挿入
return finder