查找正在导入的python模块

查找正在导入的python模块,python,package,Python,Package,从应用程序中使用的特定包中查找所有python模块的简单方法是什么?sys.modules是一个将模块名称映射到模块的字典。您可以检查其键以查看导入的模块 请参阅:您可以使用python-v,它将发出有关每个导入模块的消息: $ echo 'print "hello world"' > helo.py $ python -v helo.py # installing zipimport hook import zipimport # builtin # installed zipimpor

从应用程序中使用的特定包中查找所有python模块的简单方法是什么?

sys.modules
是一个将模块名称映射到模块的字典。您可以检查其键以查看导入的模块


请参阅:

您可以使用
python-v
,它将发出有关每个导入模块的消息:

$ echo 'print "hello world"' > helo.py
$ python -v helo.py
# installing zipimport hook
import zipimport # builtin
# installed zipimport hook
# /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site.pyc matches /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site.py
import site # precompiled from /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site.pyc
# /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/os.pyc matches /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/os.py
import os # precompiled from /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/os.pyc
import posix # builtin
# /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/posixpath.pyc matches /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/posixpath.py
import posixpath # precompiled from /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/posixpath.pyc

…等等,等等。当然,您以后可以
grep
从这个大列表中选择感兴趣的模块

我想这就是你要找的。您可以直接使用
modulefinder.py
,将其作为脚本运行,如此处所述,也可以使用
modulefinder.modulefinder
类。

一个真正简单的方法是从包或文件夹中删除所有.pyc文件,然后运行应用程序。一旦你玩了一点,做一个目录列表,看看哪些文件现在有.pyc文件。这些是应用程序导入的模块


(注意:
\uuuuu main\uuuuu
模块,无论您作为“主”脚本调用哪个模块,都不会被编译,因此您不应该期望看到它的.pyc文件,除非有什么东西从应用程序中导入了它。如果确实发生了问题,这通常是一个问题的迹象。)

它提供的信息不如@Alex Martelli的回答提供的那么多。我不知道为什么会这样,但它实际上并没有包含所有可用的软件包。我试图确定python在哪里导入了列表中没有的
多处理
。使用
python-v
,并使用verbose标志。@stvn66它不是可用包的列表。这是所有实际导入的模块。它的结构确保了当你两次导入一个模块时,你会得到相同的模块对象,并避免执行代码两次。@NedBatchelder,我显然读你的文章太快了。这是有道理的。@NedBatchelder您可以更明确一些,因为
对于排序中的键(sys.modules):print(str(key))
输出很多东西。我只想要导入的模块列表。@NedBatchelder模块列表远远不止您导入的模块。为了演示这一点,您可以从sys import modules中打开一个新的python终端,在modules中使用“math”,并获得true,尽管从未在linux下导入math,但您必须使用python-v helo.py 2>stuff.txt来允许grep,因为-v似乎输出到stderr。