从源文件中获取显式导入

时间:2015-01-10 17:18:53

标签: python python-import python-internals

问题:

是否有模块或推荐方法从Python源文件中获取所有显式import语句?

到目前为止我的研究:

我尝试使用这个模块的宝石:modulefinder。我的问题是,它列出了源文件曾经使用的模块的所有,包括递归使用的所有隐式和隐含模块。

我正在寻找一种方法来获取源文件显式导入的导入,隐式/递归导入。

实施例

从文档中拿出这一个:

#bacon.py
import re, itertools

try:
    import baconhameggs
except ImportError:
    pass

try:
    import guido.python.ham
except ImportError:
    pass

现在是模块查找器代码:

from modulefinder import ModuleFinder

finder = ModuleFinder()
finder.run_script('bacon.py')

print 'Loaded modules:'
for name, mod in finder.modules.iteritems():
    print '%s: ' % name,
    print ','.join(mod.globalnames.keys()[:3])

print '-'*50
print 'Modules not imported:'
print '\n'.join(finder.badmodules.iterkeys())

输出:

Loaded modules:
_types:
copy_reg:  _inverted_registry,_slotnames,__all__
sre_compile:  isstring,_sre,_optimize_unicode
_sre:
sre_constants:  REPEAT_ONE,makedict,AT_END_LINE
sys:
re:  __module__,finditer,_expand
itertools:
__main__:  re,itertools,baconhameggs
sre_parse:  __getslice__,_PATTERNENDERS,SRE_FLAG_UNICODE
array:
types:  __module__,IntType,TypeType
---------------------------------------------------
Modules not imported:
guido.python.ham
baconhameggs

我希望得到的输出:

Loaded modules:
re
itertools
guido.python.ham
baconhameggs

感谢您的建议。

1 个答案:

答案 0 :(得分:1)

    #modulefinder.py
    import filename 
    print dir(filename)

其中filename是包含' explicit'的模块。进口。 不幸的是,这也显示了你的函数名称。