首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >列出python包中的所有模块?

列出python包中的所有模块?
EN

Stack Overflow用户
提问于 2009-11-10 20:47:30
回答 4查看 93.8K关注 0票数 117

有没有一种简单的方法可以找到python包中的所有模块?我已经找到了this old discussion,这并不是很确定,但我希望在推出自己的基于os.listdir()的解决方案之前有一个明确的答案。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-11-10 20:58:55

是的,您想要基于pkgutil或类似的东西--这样您就可以对所有包一视同仁,不管它们是鸡蛋还是拉链之类的( os.listdir不会提供帮助)。

代码语言:javascript
复制
import pkgutil

# this is the package we are inspecting -- for example 'email' from stdlib
import email

package = email
for importer, modname, ispkg in pkgutil.iter_modules(package.__path__):
    print "Found submodule %s (is a package: %s)" % (modname, ispkg)

如何也导入它们?你可以像往常一样使用__import__

代码语言:javascript
复制
import pkgutil

# this is the package we are inspecting -- for example 'email' from stdlib
import email

package = email
prefix = package.__name__ + "."
for importer, modname, ispkg in pkgutil.iter_modules(package.__path__, prefix):
    print "Found submodule %s (is a package: %s)" % (modname, ispkg)
    module = __import__(modname, fromlist="dummy")
    print "Imported", module
票数 157
EN

Stack Overflow用户

发布于 2009-11-10 23:15:48

适合这项工作的工具是pkgutil.walk_packages。

要列出系统上的所有模块,请执行以下操作:

代码语言:javascript
复制
import pkgutil
for importer, modname, ispkg in pkgutil.walk_packages(path=None, onerror=lambda x: None):
    print(modname)

请注意,walk_packages会导入所有子包,但不会导入子模块。

如果你想列出某个包的所有子模块,那么你可以使用如下代码:

代码语言:javascript
复制
import pkgutil
import scipy
package=scipy
for importer, modname, ispkg in pkgutil.walk_packages(path=package.__path__,
                                                      prefix=package.__name__+'.',
                                                      onerror=lambda x: None):
    print(modname)

iter_modules仅列出一级深度的模块。walk_packages获取所有子模块。例如,对于scipy,walk_packages返回

代码语言:javascript
复制
scipy.stats.stats

而iter_modules仅返回

代码语言:javascript
复制
scipy.stats

关于pkgutil (http://docs.python.org/library/pkgutil.html)的文档没有列出/usr/lib/python2.6/pkgutil.py中定义的所有有趣的函数。

也许这意味着这些函数不是“公共”接口的一部分,可能会发生变化。

然而,至少在Python2.6(也许是更早的版本?)pkgutil附带了一个walk_packages方法,它递归地遍历所有可用的模块。

票数 52
EN

Stack Overflow用户

发布于 2013-03-31 04:24:31

这对我来说很有效:

代码语言:javascript
复制
import types

for key, obj in nltk.__dict__.iteritems():
    if type(obj) is types.ModuleType: 
        print key
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1707709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档