使用 import 语句禁止在 Python 中导入
Prohibiting import in Python using import statement
我想限制 Python 3 中某些模块的导入(但是对于这个问题的范围,假设我想限制任何导入)。这是我正在尝试的方式:
def __import__(self, *args, **kwrgs):
raise ImportError("Imports are not allowed")
import math
print math.sqrt(4)
据我了解,这应该引发异常,它基于该文档 - https://docs.python.org/3/reference/import.html#importsystem 说
The search operation of the import statement is defined as a call to the __import__() function, with the appropriate arguments.
然而,事实并非如此。我将不胜感激关于原因的解释和如何实现我的目标的建议
您误会了:文档并未建议在模块中定义您自己的 __import__
函数。他们想说的是,当你有一个像
这样的导入语句时
import mymodule
那么这里解析名称 mymodule
的方法是通过调用 the built-in function __import__
这样的方式:
__import__('mymodule')
如果你想阻止模块被成功导入,你可以把任何语法错误放在那里,例如将其作为文件中的第一行:
# my_unimportable_file.py
error error error
语句import module_name
调用内置函数__import__
,参数'module_name'
。它没有,事实上不能,如您所料调用 module_name.__import__()
,因为模块本身还没有被加载。
实现您想要的效果的一个好方法是检查不可导入模块中的 __name__
全局变量。当它是 运行 时,它应该等于 '__main__'
,但是当它被导入时,它将是其他一些从它的名字构造的字符串。因此你可以试试:
if __name__ != '__main__':
raise ImportError("Imports are not allowed")
我想限制 Python 3 中某些模块的导入(但是对于这个问题的范围,假设我想限制任何导入)。这是我正在尝试的方式:
def __import__(self, *args, **kwrgs):
raise ImportError("Imports are not allowed")
import math
print math.sqrt(4)
据我了解,这应该引发异常,它基于该文档 - https://docs.python.org/3/reference/import.html#importsystem 说
The search operation of the import statement is defined as a call to the __import__() function, with the appropriate arguments.
然而,事实并非如此。我将不胜感激关于原因的解释和如何实现我的目标的建议
您误会了:文档并未建议在模块中定义您自己的 __import__
函数。他们想说的是,当你有一个像
import mymodule
那么这里解析名称 mymodule
的方法是通过调用 the built-in function __import__
这样的方式:
__import__('mymodule')
如果你想阻止模块被成功导入,你可以把任何语法错误放在那里,例如将其作为文件中的第一行:
# my_unimportable_file.py
error error error
语句import module_name
调用内置函数__import__
,参数'module_name'
。它没有,事实上不能,如您所料调用 module_name.__import__()
,因为模块本身还没有被加载。
实现您想要的效果的一个好方法是检查不可导入模块中的 __name__
全局变量。当它是 运行 时,它应该等于 '__main__'
,但是当它被导入时,它将是其他一些从它的名字构造的字符串。因此你可以试试:
if __name__ != '__main__':
raise ImportError("Imports are not allowed")