我正在尝试阻止某个模块被特定的其他模块导入:
Z.py:
#if B is the module that is trying to import me: <- what goes here?
#raise exception
print("Z")
A.py:
import Z
print("A")
B.py
import Z
print("B")
预期产出:
>> python A.py
>> "A" \n "Z"
>> python B.py
>> Exception: bla traceback etc...
答案 0 :(得分:0)
_Z.py
约定在这里很有用,但我正在寻找一种更强大的失败保存。
找到一些查看框架的解决方案:
_Z.py;)
import inspect, os
calling_path = inspect.getframeinfo(inspect.getouterframes(inspect.currentframe())[1][0])[0]
calling_module_name = os.path.basename(calling_path).replace(".py","")
if not calling_module_name.startswith("A"):
raise Exception("You cannot import me")
print("_Z")
然而,这个字符串匹配对我没有吸引力,所以如果有人有一个更优雅的解决方案;我很乐意接受它。