2012-12-10 114 views
3

如何确定导入模块中导入模块的名称。我有部分解决方案,但不是完整解决方案。python确定导入模块的名称

的代码是: A.py

import B 

if __name__ == '__main__': 
    print 'This a test' 

的B.py

import sys 
import C 
if sys.argv[0] == 'A': 
    doSomething() 

在这一点上,我的问题都因为内部模块B,我知道的名字主要是调用导入,在这种情况下是A.但是,在B中,请求导入C,并且我想知道B是否导入了C?这是如何完成的?

+0

你介意分享一下你为什么要这么做的背景吗? –

+0

乔恩,我有一个项目,我正在使用一个团队建立的图书馆。在库中导入一个模块,导致路径问题崩溃。我的意图是在库中添加一行代码,如果myProject正在导入这个模块,那么不要导入这个崩溃的模块,因为我无论如何都无法使用它。我刚刚被告知,我的请求是不明确的,因为python只导入一次模块,所以这个方案可能不健壮。 –

回答

0

然而,我怀疑这实际上是你想要做的。请注意,特别是,B中的顶级代码只能运行一次,无论从多处导入模块的次数。例如,如果您还在模块B到达之前导入模块D的某个地方导入模块C,则从C导入的代码将不会运行。

我认为这可能是一个更好的主意,只是在C中定义一个函数,B可具有进口C.

2

sys.argv[0]后运行一次,当进行import不是模块的名称。这是可执行文件的名称。

另一方面,在Python模块__name__内部,等于a)模块名称(如果通过导入执行); b)"__main__"如果它作为脚本执行。

模块不“知道”谁执行import(没有“父”属性或类似的东西)。用不同的功能定义你的行为,并从不同的模块中调用它们。

+0

+1“用不同的功能定义你的行为并从不同的模块中调用它们。” – mbatchkarov

相关问题