Python导入类型检测

时间:2011-05-12 19:38:55

标签: python module import

python模块可以检测是否已使用import modulefrom module import *导入?像

这样的东西
 if __something__=='something':
      print 'Directly imported with "import ' + __name__ + '"'
 else:
      print 'Imported with "from ' + __name__ + ' import *"'

谢谢。

2 个答案:

答案 0 :(得分:4)

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

稍后导入时,模块主体甚至不执行。因此,如果首先将模块导入为

import module

和第二次

from module import name

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

答案 1 :(得分:0)

虽然Svens的回答可能是正确的,但这似乎有点明显,当我偶然发现这个问题时,这正是我真正想要的。

这个模块至少知道你传递了一个输​​入参数。虽然允许仅对此特定脚本进行单元测试,而无需在导入它的模块中执行单元测试。

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来说并没有真正帮助你。 :)