【问题标题】:Find which python modules are being imported查找正在导入的 python 模块
【发布时间】:2011-01-01 03:09:58
【问题描述】:

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

【问题讨论】:

    标签: python package


    【解决方案1】:

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

    见:http://docs.python.org/library/sys.html#sys.modules

    【讨论】:

    • 我不确定原因的详细信息,但这实际上并不包含 ALL 可用的软件包。我试图确定 python 在哪里导入不在列表中的multiprocessing。使用python -v,详细标志有效。
    • @stvn66 它并不是一个可用包的列表。它是实际导入的所有模块。这种结构可以确保当您两次导入一个模块时,您会获得相同的模块对象,并避免执行两次代码。
    • @NedBatchelder,我显然读得太快了。这是有道理的。
    • @NedBatchelder 你能说得更清楚些吗,因为for key in sorted(sys.modules) : print(str(key)) 输出了很多东西。我只想要导入的模块列表。
    • @NedBatchelder modules 列出的不仅仅是您导入的模块。为了演示这个,你可以打开一个新的 python 终端,从 sys 导入模块,模块中的 'math',尽管从未导入过数学,但仍然可以实现
    【解决方案2】:

    您可以使用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这个大列表中感兴趣的模块!-)

    【讨论】:

    • 在 linux 下你必须使用 python -v helo.py 2>stuff.txt 来允许 grep,因为 -v 似乎输出到 stderr。
    【解决方案3】:

    我认为modulefinder 是您正在寻找的。您可以直接使用modulefinder.py,将其作为脚本运行,如那里所述,或者您可以使用modulefinder.ModuleFinderimport the module and then create a report

    【讨论】:

    • 它提供的信息不如@Alex Martelli 的回答提供的那么多。
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-20
      • 1970-01-01
      • 2012-06-28
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多