开发者

Python import type detection

Can a python module detect if has been imported with import module or from module import *? Something like

 if __something__=='something':
      print 'Directly imported with "import ' + __name__ + '"'
 else:
      print 'Im开发者_高级运维ported with "from ' + __name__ + ' import *"'

Thank you.


No, it's not possible to detect this from within the module's code. Upon the first import, the module body is executed and a new module object is inserted in sys.modules. Only after this, the requested names are inserted into the namespace of the importing module.

Upon later imports, the module body isn't even executed. So if a module is first imported as

import module

and a second time as

from module import name

it has no chance to do anything at all during the second import. In particular, it cannot check how it is imported.


While Svens answer is probably the correct one, and this might seem a bit obvious, It is what I was really looking for when I stumbled upon this question.

This module will at least know that you passed an input argument to it. While allows unit testing of just this specific script without the unit test being performed in the module that imported it.

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

However, It doesn't really help you, Emilio, if you have no input arguments. : )

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜