Python 获取包';没有外部模块的s成员

Python 获取包';没有外部模块的s成员,python,Python,我想在包中获取模块名称列表,但当我运行此代码时: import inspect modules = inspect.getmembers(mypackage) for m in modules: print(m[0]) 我不仅得到了“真正的”成员,还得到了mypackage本身,以及一些模块所依赖的外部包,例如ElementTree(如ET,因为这样使用它更容易),队列或进程(这些都来自多处理) 当然,我也会得到类似于\uuuuu内置项,\uuuuuu文档等等的东西,但基于下划线很

我想在包中获取模块名称列表,但当我运行此代码时:

import inspect

modules = inspect.getmembers(mypackage)

for m in modules:
    print(m[0])
我不仅得到了“真正的”成员,还得到了
mypackage
本身,以及一些模块所依赖的外部包,例如
ElementTree
(如
ET
,因为这样使用它更容易),
队列
进程
(这些都来自
多处理

当然,我也会得到类似于
\uuuuu内置项
\uuuuuu文档
等等的东西,但基于下划线很容易排除这些东西

我也发现当我这么做的时候

import ElementTree as ET
在我的主脚本中,我可以通过两种不同的方式访问它-作为普通的
ET
本身,也可以作为
mymodule.ET
。我觉得这很糟糕


如何避免这种情况?

试着用这个吧,酒吧是你的套餐

import pkgutil

import bar

for _, name, ispkg in pkgutil.walk_packages(bar.__path__, "%s." % bar.__name__):
    if not ispkg:
        print(name)

试着用这个吧,酒吧是你的套餐

import pkgutil

import bar

for _, name, ispkg in pkgutil.walk_packages(bar.__path__, "%s." % bar.__name__):
    if not ispkg:
        print(name)

您想要一个包的子模块列表,还是想要包的每个属性都被认为是其公共API的一部分?请注意,导入包通常不会加载它的任何子模块,因此它们甚至不会显示在
getmembers
输出中。@user2357112:我相信它是通过
\uuu init\uuuuuuuuuuy.py
加载它们的。您可以查看
pydoc
是如何实现的。您想要一个包的子模块列表吗,或者您希望包的每个属性都被视为其公共API的一部分吗?请注意,导入包通常不会加载它的任何子模块,因此它们甚至不会显示在
getmembers
输出中。@user2357112:我相信它是通过
\uuu init\uuuuuuuuuy.py
加载它们的。您可以看看
pydoc
是如何做到的。