2011-05-12 68 views
3

python模块可以检测是否已导入import modulefrom module import *?类似于Python导入类型检测

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

谢谢。

+6

需要依靠这听起来非常非常破碎。 – 2011-05-12 19:41:01

+0

我只是好奇=) – Emilio 2011-05-12 19:42:07

回答

4

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

稍后导入时,模块主体甚至没有执行。因此,如果一个模块被首次导入为

import module 

和第二次作为

from module import name 

它有没有机会在第二导入过程中做任何事情。特别是,它不能检查它是如何导入的。

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。 :)