什么是“进口安全” Python中是什么意思?(What does “import safe” me

2019-09-16 18:25发布

我刚打哪里鼻子不会运行的测试标记为可执行文件(如中描述的行为上一个问题 )。 我发现这个惊人的,我浪费了一些时间,试图找出为什么鼻子不运行我的测试之前,我学到了鼻子的行为在这里。

在联机帮助页nosetests,它描述了一个选项,以覆盖缺省行为:

--exe               Look for tests in python modules that are executable.
                    Normal behavior is to exclude executable modules,
                    since they may not be import-safe [NOSE_INCLUDE_EXE]

我的问题是:什么是“进口安全”呢? 什么是一个非进口安全模块的例子吗? 并能在非进口安全模块通过删除可执行位进行进口安全的,或者是有更多的什么原因呢?

Answer 1:

我不熟悉的鼻子,但我敢肯定它的意思是“进口安全”是导入模块将刚刚定义的东西,而不是去关和运行的东西。

这个想法是,如果一个.py文件被设计为一个脚本来执行,那么它的功能将在执行模块范围代码启动。 这可能对与进口把守__name__ == '__main__'的把戏,但它可能不是。 如果不是,将其导入可能会做的时候不带任何参数,在某些情况下可能是个坏调用它会做一个脚本,同样的事情。

所以,你可以明确地告诉鼻子,有没有这样的可执行脚本,那将是危险的通过将导入--exe标志,或者你可以从你的脚本清除可执行权限。



Answer 2:

“进口安全”没有一个特定的,定义的含义。 在这种情况下,关键是,Python模块可以做一些进口时(记住,导入模块只是意味着执行它并保存所有的东西在其命名空间)。

如果模块标有可执行位, nose假设是这种情况-因为你可能不希望这些东西发生在每次运行测试时,它会跳过模块。



Answer 3:

它指的是可以被两个进口或作为脚本执行模块。 这通常是通过下面的一段代码来完成:

if __name__ == "__main__":
    print "running as script"

如果本来是可执行的脚本没有这个检查,进口将立即执行,这将可能有有害的副作用或异常凸起末端。



文章来源: What does “import safe” mean in Python?