“导入安全”在Python中意味着什么?

时间:2012-04-26 09:16:45

标签: python permissions nose

我只是点击了不会运行标记为可执行的测试的行为(如a previous question中所述)。我发现这令人惊讶,我浪费了一些时间试图找出为什么在我了解鼻子的行为之前鼻子没有运行我的测试。

在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]

我的问题是:“进口安全”是什么意思?什么是非导入安全模块的示例?并且可以通过删除可执行位来使非导入安全模块成为可导入安全的,或者除此之外还有更多内容吗?

3 个答案:

答案 0 :(得分:5)

“import-safe”没有特定的,定义的含义。在这种情况下,重点是Python模块在导入时可以执行某些操作(请记住,导入模块只是意味着执行它并将所有内容保存在其命名空间中)。

如果模块标有可执行位,nose认为是这种情况 - 并且由于您可能不希望每次运行测试时都发生这种情况,它将跳过模块

答案 1 :(得分:5)

我对鼻子并不熟悉,但我很确定“导入安全”意味着导入模块只会定义事物,而不是去运行。

这个想法是,如果.py文件被设计为作为脚本执行,那么它的功能将在执行模块范围代码时启动。这可以防止使用__name__ == '__main__'技巧进行导入,但可能不会。如果不是这样,那么导入它可能会在没有参数的情况下执行与脚本相同的操作,这在某些情况下可能是错误的。

因此,您可以通过传递--exe标志明确告诉鼻子没有这样的可执行脚本导入是危险的,或者您可以从脚本中清除可执行权限。

答案 2 :(得分:4)

它指的是可以作为脚本导入或执行的模块。这通常由以下代码完成:

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

如果一个可执行的脚本没有这个检查,导入会立即执行它,这可能会导致不必要的副作用或引发异常。