如何知道谁在python中导入我? [英] How to know who is importing me in python?
问题描述
如何找出在python中导入特定文件的文件?
How can I find out what file is importing a particular file in python?
请考虑以下示例:
#a.py
import cmn
....
#b.py
import cmn
...
#cmn.py
#Here, I want to know which file (a.py or b.py)
#is importing this one.
#Is it possible to do this?
...
所有文件 a.py
, b.py
和 cmn.py
位于同一目录中。
All the files a.py
, b.py
and cmn.py
are in the same directory.
为什么我要这样做?
在C / C ++中,它们具有包含功能。我想做的事情可以用C / C ++代码来说明。
Why do I want to do this?
In C/C++, they have include feature. What i want to do can illuminate by the C/C++ code.
//a.cpp
....
#define SOME_STUFF ....
#include "cmn.h"
//b.cpp
...
#define SOME_STUFF ....
#include "cmn.h"
//cmn.h
//Here, I'll define some functions/classes that will use the symbol define
//in the a.cpp or b.cpp
...
....code refer to the SOME_STUFF.....
在C / C ++中,我们可以使用此方法重用sourecode。
In C/C++, we can use this method to reuse sourecode.
现在返回我的python代码。
当a.py导入cmn.py时,我希望运行cmn.py并且cmn.py将引用a.py中定义的符号。
当b.py导入cmn.py时,我希望运行cmn.py,cmn.py将引用b.py中定义的符号。
Now return to my python code.
When a.py import cmn.py, i hope to run cmn.py and the cmn.py will refer to the symbol defined in the a.py.
When b.py import cmn.py, i hope to run cmn.py and the cmn.py will refer to the symbol defined in the b.py.
推荐答案
集合模块中的 namedtuple 代码有一个示例,说明如何(以及何时)执行此操作:
The namedtuple code in the collections module has an example of how (and when) to do this:
#cmn.py
import sys
print 'I am being imported by', sys._getframe(1).f_globals.get('__name__')
这种方法的一个限制是最外面的模块总是命名为 __ main __
。如果是这种情况,可以从 sys.argv [0]
确定最外层模块的名称。
One limitation of this approach is that the outermost module is always named __main__
. If that is the case, the name of the outermost module can be determined from sys.argv[0]
.
第二个限制是,如果使用sys._getframe的代码在模块范围内,则只在第一次导入cmn.py时执行。如果要监视模块的所有导入,则需要在导入后调用某种函数。
A second limitation is that if the code using sys._getframe is in the module scope it is only executed on the first import of cmn.py. You'd need to call a function of some sort after imports if you want to monitor all imports of the module.
这篇关于如何知道谁在python中导入我?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!