Python导入类型检测

3

一个Python模块能否检测到它是通过import module还是from module import *被导入的?类似这样的:

 if __something__=='something':
      print 'Directly imported with "import ' + __name__ + '"'
 else:
      print 'Imported with "from ' + __name__ + ' import *"'

谢谢你。


6
需要依赖这个听起来非常、非常糟糕。 - Ignacio Vazquez-Abrams
2个回答

4

不,无法在模块代码中检测到这个。在第一次导入时,模块主体被执行并插入新的模块对象到sys.modules中。只有在此之后,请求的名称才会插入到导入模块的命名空间中。

在以后的导入中,模块主体甚至不会被执行。因此,如果一个模块首次被导入为

import module

并且第二次作为

from module import name

在第二次导入过程中,it没有任何机会做任何事情。特别是,它无法检查它的导入方式。


0

虽然Sven的答案可能是正确的,这似乎有点显而易见,但当我偶然发现这个问题时,这正是我真正想要的。

该模块至少会知道您向其传递了一个输入参数。这样可以对特定脚本进行单元测试,而不必在导入它的模块中执行单元测试。

import sys

def myfunction(blah):
    return "something like: " + blah

noargs=len(sys.argv)
if noargs>1:
    for i in range(noargs-1):
        print myfunction(sys.argv[i+1])

然而,如果你没有输入参数,这并不能真正帮助你,Emilio。:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接