阻止从特定的其他模块导入Python模块

时间:2014-02-13 09:48:34

标签: python

我正在尝试阻止某个模块被特定的其他模块导入:

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

1 个答案:

答案 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")

然而,这个字符串匹配对我没有吸引力,所以如果有人有一个更优雅的解决方案;我很乐意接受它。