Python pkgutil.walk_包不返回子包
我有一个包布局:Python pkgutil.walk_包不返回子包,python,packages,Python,Packages,我有一个包布局: scenarios/ __init__.py X/ __init__.py Y/ __init__.py Z/ __init__.py 我已经执行了 import scenarios pkgutil.walk_packages(scenarios.__path__, scenarios.__name__ + '.') 但是这会生成一个只包含包X和Z的列表,缺少Y。我可以使用什么
scenarios/
__init__.py
X/
__init__.py
Y/
__init__.py
Z/
__init__.py
我已经执行了
import scenarios
pkgutil.walk_packages(scenarios.__path__, scenarios.__name__ + '.')
但是这会生成一个只包含包X和Z的列表,缺少Y。我可以使用什么来获取所有子目录
谢谢,这里有一个理论:walk_packages函数尝试导入列出的每个模块。当它到达子包“Y”时,它尝试导入它,但出现了一个错误。默认情况下,此错误被抑制。一个副作用是walk_packages函数不会递归到Y。您可以使用“onerror”关键字参数来测试这个理论。例如: 导入系统,pkgutil 从回溯导入打印\u tb def onerror(名称): 打印(“导入模块%s”%name时出错) 类型、值、回溯=sys.exc_info() 打印(回溯) 导入场景 pkgutil.walk_包(场景、路径、场景、名称、OneRor=OneRor)
这至少在Python3.6中是有效的,这是值得的。设置测试场景:
mkdir-p场景/X/Y场景/Z
查找场景-键入d-exec touch{}/uuu init_uuu.py\;
现在运行示例代码的一个版本:
导入pkgutil
导入场景
对于pkgutil.walk_程序包中的模块信息(场景、路径、场景、名称和+):
打印(模块信息名称)
其中打印:
scenarios.X
scenarios.X.Y
scenarios.Z