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

Phi*_*ter 7 python permissions nose

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

在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]
Run Code Online (Sandbox Code Playgroud)

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

Kat*_*iel 5

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

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


Ben*_*Ben 5

我不熟悉鼻子,但我很确定"导入安全"意味着导入模块只会定义东西,而不是去运行东西.

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

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