python/Python\343\201\247\347\211\271\345\256\232\343\201\256\343\203\221\343\203\203\343\202\261\343\203\274\343\202\270\343\201\256\343\202\244\343\203\263\343\203\235\343\203\274\343\203\210\343\202\222\343\203\226\343\203\255\343\203\203\343\202\257\343\201\231\343\202\213.md
... ...
@@ -0,0 +1,32 @@
1
+```
2
+import sys
3
+from importlib.abc import MetaPathFinder
4
+from typing import List
5
+
6
+
7
+class BlockImportFinder(MetaPathFinder):
8
+ def __init__(self, blocked_modules: List[str]):
9
+ self.blocked_modules = set(blocked_modules)
10
+
11
+ def find_spec(self, fullname, path, target=None):
12
+ # 完全修飾名とサブモジュールもブロック
13
+ for blocked in self.blocked_modules:
14
+ if fullname == blocked or fullname.startswith(blocked + "."):
15
+ raise ImportError(f"Importing '{fullname}' is blocked.")
16
+ return None # 他のファインダーに処理を委ねる
17
+
18
+
19
+def block_imports(blocked_modules: List[str]) -> BlockImportFinder:
20
+ """
21
+ 指定されたモジュールのインポートをブロックするインポートファインダーを追加します。
22
+
23
+ Args:
24
+ blocked_modules (List[str]): ブロックしたいモジュール名のリスト。
25
+
26
+ Returns:
27
+ BlockImportFinder: 追加されたカスタムファインダーのインスタンス。
28
+ """
29
+ finder = BlockImportFinder(blocked_modules)
30
+ sys.meta_path.insert(0, finder) # 優先度を高くするために先頭に挿入
31
+ return finder
32
+```
... ...
\ No newline at end of file