列出 python 模块的子模块

hil*_*gjr 16 python module

如何获取已导入的 Python 模块的所有子模块的名称/列表?(不是外部导入的模块/包,只是与模块子文件夹位于同一文件夹中的那个)。

我在用

import inspect
print([o[0] for o in inspect.getmembers(module_imported) if inspect.ismodule(o[1])])
Run Code Online (Sandbox Code Playgroud)

但这也会打印导入的系统模块和主模块文件夹中的文件。

Gra*_*Dot 11

使用pkgutil,尽管它并不总是与 pyinstaller 一起使用。

pkgutil.iter_modules(imported_module.__path__))
Run Code Online (Sandbox Code Playgroud)

  • 就是这样。 (5认同)
  • 这是最合乎逻辑的方法,无需太多额外的步骤。 (2认同)

zal*_*lun 11

您可以使用predicate该方法的参数getmembers。它的作用类似于过滤器。在这种情况下,它将是:

inspect.getmembers(module_imported, inspect.ismodule)
Run Code Online (Sandbox Code Playgroud)


And*_*dyP 8

这是GraphicalDot 答案的可复制粘贴版本。

只需更改my_imported_module为您要检查的模块即可。

from pkgutil import iter_modules

def list_submodules(module):
    for submodule in iter_modules(module.__path__):
        print(submodule.name)

list_submodules(my_imported_module)
Run Code Online (Sandbox Code Playgroud)


Mev*_*abu 5

如何dir在模块上使用来获取列出的所有子模块或属性?

In [1]: import requests

In [2]: dir(requests)
Out[2]:
['ConnectTimeout',
 'ConnectionError',
 'DependencyWarning',
 'FileModeWarning',
 'HTTPError',
 'NullHandler',
 'PreparedRequest',
 'ReadTimeout',
 'Request',
 'RequestException',
 'Response',
 'Session',
 'Timeout',
 'TooManyRedirects',
 'URLRequired',
 '__author__',
 '__build__',
 '__builtins__',
 '__cached__',
 '__copyright__',
 '__doc__',
 '__file__',
 '__license__',
 '__loader__',
 '__name__',
 '__package__',
 '__path__',
 '__spec__',
 '__title__',
 '__version__',
 'adapters',
 'api',
 'auth',
 'certs',
 'codes',
 'compat',
 'cookies',
 'delete',
 'exceptions',
 'get',
 'head',
 'hooks',
 'logging',
 'models',
 'options',
 'packages',
 'patch',
 'post',
 'put',
 'request',
 'session',
 'sessions',
 'status_codes',
 'structures',
 'utils',
 'warnings']
Run Code Online (Sandbox Code Playgroud)

  • `dir()`“试图产生最相关的信息,而不是完整的信息”。就我个人而言,我收到了不一致的返回值。来源:docs.python.org/library/functions.html#dir (2认同)