Answers:
import sys
sys.modules.keys()
仅获取当前模块的所有导入的一种近似方法是检查globals()
模块:
import types
def imports():
for name, val in globals().items():
if isinstance(val, types.ModuleType):
yield val.__name__
这不会返回本地导入或非模块导入(如)from x import y
。请注意,这将返回,val.__name__
因此,如果您使用的话,将获得原始模块名称import module as alias
。如果要使用别名,请改为产生名称。
import numpy as np
,它将返回numpy
而另外两个建议将返回np
。
name
变量中使用它。因此,要生成字符串,import numpy as np
请执行类似于'import %s as %s' % (val.__name__, name)
yield语句现在所在的位置。
找到的路口sys.modules
有globals
:
import sys
modulenames = set(sys.modules) & set(globals())
allmodules = [sys.modules[name] for name in modulenames]
frozenset
这里代替?-这是我的1班轮:frozenset(imap(lambda name: modules[name], frozenset(modules) & frozenset(globals())))
from
命令导入的模块。例如,考虑一下from scipy.stats import norm
。这并不告诉我norm
模块已导入。如何将其整合到其中?
如果要从脚本外部执行此操作:
Python 2
from modulefinder import ModuleFinder
finder = ModuleFinder()
finder.run_script("myscript.py")
for name, mod in finder.modules.iteritems():
print name
Python 3
from modulefinder import ModuleFinder
finder = ModuleFinder()
finder.run_script("myscript.py")
for name, mod in finder.modules.items():
print(name)
这将打印myscript.py加载的所有模块。
.iteritems()
为.items()
并将其括起来
实际上,它与以下软件配合得很好:
import sys
mods = [m.__name__ for m in sys.modules.values() if m]
这将创建一个带有可导入模块名称的列表。
从@Lila窃取(由于未格式化,因此无法发表评论),这也显示了模块的/ path /:
#!/usr/bin/env python
import sys
from modulefinder import ModuleFinder
finder = ModuleFinder()
# Pass the name of the python file of interest
finder.run_script(sys.argv[1])
# This is what's different from @Lila's script
finder.report()
产生:
Name File
---- ----
...
m token /opt/rh/rh-python35/root/usr/lib64/python3.5/token.py
m tokenize /opt/rh/rh-python35/root/usr/lib64/python3.5/tokenize.py
m traceback /opt/rh/rh-python35/root/usr/lib64/python3.5/traceback.py
...
..适用于grepping或您拥有什么。警告,它很长!
在这种情况下,我喜欢使用列表理解:
>>> [w for w in dir() if w == 'datetime' or w == 'sqlite3']
['datetime', 'sqlite3']
# To count modules of interest...
>>> count = [w for w in dir() if w == 'datetime' or w == 'sqlite3']
>>> len(count)
2
# To count all installed modules...
>>> count = dir()
>>> len(count)