gpt4 book ai didi

python - 是否有一种标准方法可以列出包中 Python 模块的名称?

转载 作者:IT老高 更新时间:2023-10-28 21:11:27 25 4
gpt4 key购买 nike

有没有一种不使用 __all__ 直接列出包中所有模块名称的方法?

例如,给定这个包:

/testpkg
/testpkg/__init__.py
/testpkg/modulea.py
/testpkg/moduleb.py

我想知道是否有标准或内置的方式来做这样的事情:

>>> package_contents("testpkg")
['modulea', 'moduleb']

手动方法是遍历模块搜索路径以找到包的目录。然后可以列出该目录中的所有文件,过滤掉唯一命名的 py/pyc/pyo 文件,去除扩展名,然后返回该列表。但这对于模块导入机制已经在内部做的事情来说似乎是相当多的工作。该功能是否暴露在任何地方?

最佳答案

使用 python2.3 and above ,你也可以使用 pkgutil 模块:

>>> import pkgutil
>>> [name for _, name, _ in pkgutil.iter_modules(['testpkg'])]
['modulea', 'moduleb']

编辑:请注意,pkgutil.iter_modules 的参数不是模块列表,而是路径列表,因此您可能需要执行以下操作:

>>> import os.path, pkgutil
>>> import testpkg
>>> pkgpath = os.path.dirname(testpkg.__file__)
>>> print([name for _, name, _ in pkgutil.iter_modules([pkgpath])])

关于python - 是否有一种标准方法可以列出包中 Python 模块的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/487971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com