python正在确定导入模块的名称

python正在确定导入模块的名称,python,multithreading,import,names,Python,Multithreading,Import,Names,如何在正在导入的模块中确定导入模块的名称。我有部分的解决方案,但不是完整的 代码是: A.py B.py import sys import C if sys.argv[0] == 'A': doSomething() 在这一点上,我已经准备好了,因为在模块B中,我知道调用导入的main的名称,在本例中是A。然而,在B中,请求导入C,而在C中,我想知道B是否导入了C?这是怎么做到的 不过,我怀疑这是你真正想做的。特别要注意的是,B中的顶级代码将只运行一次,无论模块从多少个地方导入多少次

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

代码是: A.py

B.py

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

在这一点上,我已经准备好了,因为在模块B中,我知道调用导入的main的名称,在本例中是A。然而,在B中,请求导入C,而在C中,我想知道B是否导入了C?这是怎么做到的

不过,我怀疑这是你真正想做的。特别要注意的是,B中的顶级代码将只运行一次,无论模块从多少个地方导入多少次

例如,如果您还将模块D导入某个在模块B到达之前导入模块C的位置,那么从B导入时的C代码将永远不会运行


我认为最好简单地在C中定义一个函数,B可以在导入C后运行一次。

sys。在执行导入时,argv[0]
不是模块的名称。这是可执行文件的名称

另一方面,Python模块内部的
\uuuuuu name\uuuuuu
等于a)模块名称(如果它是通过导入执行的),b)
“\uuuuuu main\uuuuuu”
(如果它是作为脚本执行的)


模块不“知道”谁执行了导入操作(没有“父”属性或类似的内容)。使用不同的函数定义您的行为,并从不同的模块调用它们。

您可以尝试或。两者都将为您提供堆栈的函数调用,因此这并不是您想要的解决方案(模块)

+1表示“用不同的函数定义你的行为,并从不同的模块调用它们”。你介意分享一下你为什么要这样做的背景吗?Jon,我有一个项目,我正在使用一个团队构建的库。库中有一个模块的导入,该模块因路径问题而崩溃。我的意图是在库中添加一行代码,上面说,如果myProject正在导入此模块,那么不要导入崩溃的模块,因为我对它没有任何用处。我刚刚被告知,我的请求定义不正确,因为python只导入一次模块,所以这个方案可能不健壮。
import sys
import C
if sys.argv[0] == 'A':
    doSomething()