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
是如何做到的。