如何列出导入的模块?

ale*_*2k8 133 python

如何枚举所有导入的模块?

例如,我想从这段代码中获取['os','sys']

import os
import sys
Run Code Online (Sandbox Code Playgroud)

Gle*_*ard 163

import sys
sys.modules.keys()
Run Code Online (Sandbox Code Playgroud)

获取当前模块的所有导入的近似值是检查globals()模块:

import types
def imports():
    for name, val in globals().items():
        if isinstance(val, types.ModuleType):
            yield val.__name__
Run Code Online (Sandbox Code Playgroud)

这不会返回本地导入,也不会返回非模块导入from x import y.请注意,这将返回,val.__name__以便您使用时获得原始模块名称import module as alias; 如果你想要别名,请改为产生名称.

  • 最后我认为最好使用`list(imports())`列出所有导入的模块.. (8认同)
  • 这是当您重新定义导入模块的名称时返回完整模块名称的唯一解决方案。例如,如果您执行“import numpy as np”,这将返回“numpy”,而其他两个建议将返回“np”。 (3认同)
  • 或者,您可以找到sys.modules与globals的交集,而根本不进行类型测试。 (2认同)
  • 如果您出于某种原因需要模块名称和别名,则可以在 `name` 变量中使用。因此,要生成字符串 `import numpy as np`,请执行类似 `'import %s as %s' % (val.__name__, name)` 的操作,现在 yield 语句所在的位置。 (2认同)

Mar*_*cin 32

找到的路口sys.modulesglobals:

import sys
modulenames = set(sys.modules) & set(globals())
allmodules = [sys.modules[name] for name in modulenames]
Run Code Online (Sandbox Code Playgroud)

  • 上述解决方案不会提取使用 `from` 命令导入的模块。例如,考虑`from scipy.stats import norm`。这并没有告诉我导入了 `norm` 模块。这怎么能融入其中呢? (3认同)

Lil*_*ila 25

如果您想从脚本外部执行此操作:

from modulefinder import ModuleFinder
finder = ModuleFinder()
finder.run_script("myscript.py")
for name, mod in finder.modules.iteritems():
    print name
Run Code Online (Sandbox Code Playgroud)

这将打印myscript.py加载的所有模块.

  • 注意:当您处理名称空间时它会崩溃:https://bugs.python.org/issue40350 (3认同)

Mik*_*iak 12

print [key for key in locals().keys()
       if isinstance(locals()[key], type(sys)) and not key.startswith('__')]
Run Code Online (Sandbox Code Playgroud)


muk*_*ddy 7

让说你进口的数学和重:

>>import math,re
Run Code Online (Sandbox Code Playgroud)

现在看到相同的用途

>>print(dir())
Run Code Online (Sandbox Code Playgroud)

如果在导入之前和导入之后运行它,则可以看到其中的区别。

  • 结果仅包括标准库模块,例如。`math`、`re` 和 `sys`,符合 OP 的示例。但是它无法包含所有导入的模块,例如。`myapp.client`。 (3认同)

小智 6

它实际上非常适合:

import sys
mods = [m.__name__ for m in sys.modules.values() if m]
Run Code Online (Sandbox Code Playgroud)

这将创建一个包含可导入模块名称的列表.


Oha*_*hen 5

此代码列出了您的模块导入的模块:

import sys
before = [str(m) for m in sys.modules]
import my_module
after = [str(m) for m in sys.modules]
print [m for m in after if not m in before]
Run Code Online (Sandbox Code Playgroud)

如果您想知道在新系统上安装哪些外部模块来运行您的代码,而不需要一次又一次地尝试,它应该很有用。

它不会列出sys从中导入的模块。