Yuncy Yuncy - 1 month ago 5
Python Question

How to know who is importing me in python?

How can I find out what file is importing a particular file in python?

Consider the following example:

#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?
...


All the files
a.py
,
b.py
and
cmn.py
are in the same directory.

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.....


In C/C++, we can use this method to reuse sourecode.

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.

Answer

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__')

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].

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.

Comments