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