如何获取python中内置模块的列表?

如何获取python中内置模块的列表?,python,Python,我想获得python中内置模块的名称列表,以便测试函数命名约定(下划线、CamelCase或mixedCase)的流行程度 我知道有一个字符串列表,但我想知道是否有一个更易于使用的字符串列表:) 更新: len(dir(__builtins__)) = 145 len(stdlib_list("2.7")) = 430 help('modules') = 508 # counting manually the output 这个怎么样?不过,这会得到一个内置函数和变量列表,而不是模块列

我想获得python中内置模块的名称列表,以便测试函数命名约定(下划线、CamelCase或mixedCase)的流行程度

我知道有一个字符串列表,但我想知道是否有一个更易于使用的字符串列表:)

更新:

len(dir(__builtins__)) = 145  
len(stdlib_list("2.7")) = 430  
help('modules') = 508 # counting manually the output

这个怎么样?不过,这会得到一个内置函数和变量列表,而不是模块列表

dir(__builtins__)

help('modules')
将根据提供给您所有模块的列表。但是,没有字符串列表。

编译的模块名称位于中。有关所有可导入的模块,请参见

以干净的方式运行这些模块,以便(几乎)只获得Python本身附带的模块


请注意,“受欢迎程度调查”必然包括使用旧的、不鼓励使用的命名约定的模块,因为它们是在今天的指导方针出台之前编写的,并且不能更改,因为需要向后兼容。它可能对某些事情有用,但对于回答最佳实践问题(如“我应该如何命名我的函数?”)却没有帮助。有关详细信息,请参阅,尤其是“命名约定”部分。

>>dir(\uuuu内置项)


>>帮助(\uu内置)
现在有了第三方软件包。它在官方Python文档中删除了标准库页面的TOC,并构建了一个列表

您可以使用pip安装它

pip install stdlib_list
还有一份图书馆的名单

In [12]: from stdlib_list import stdlib_list

In [13]: libraries = stdlib_list("3.5")

In [14]: libraries[4:12]
Out[14]: ['abc', 'aifc', 'argparse', 'array', 'ast', 'asynchat', 'asyncio', 'asyncore']
您可以从以下位置找到。

所有已知的内置模块都列在sys.builtin_module_名称中

sys中的模块名称。内置模块名称是Python解释器:

一个字符串元组,给出编译到此Python解释器中的所有模块的名称

导入时,每个内置模块都使用特殊的加载程序:
BuiltinImporter

In [65]: import itertools, sys, gc

In [66]: itertools.__loader__, sys.__loader__, gc.__loader__
Out[66]: 
(_frozen_importlib.BuiltinImporter,
 _frozen_importlib.BuiltinImporter,
 _frozen_importlib.BuiltinImporter)
在Python3中,内置模块的数量略有增加

$ python2.7 -c "import sys; print('Count built-in modules: %d' %len(sys.builtin_module_names)); print(sys.builtin_module_names)"
Count built-in modules: 51
('__builtin__', '__main__', '_ast', '_bisect', '_codecs', '_collections', '_functools', '_heapq', '_io', '_locale', '_md5', '_random', '_sha', '_sha256', '_sha512', '_socket', '_sre', '_struct', '_symtable', '_warnings', '_weakref', 'array', 'binascii', 'cPickle', 'cStringIO', 'cmath', 'datetime', 'errno', 'exceptions', 'fcntl', 'gc', 'grp', 'imp', 'itertools', 'marshal', 'math', 'operator', 'posix', 'pwd', 'select', 'signal', 'spwd', 'strop', 'sys', 'syslog', 'thread', 'time', 'unicodedata', 'xxsubtype', 'zipimport', 'zlib')
$ python3.4 -c "import sys; print('Count built-in modules: %d' %len(sys.builtin_module_names)); print(sys.builtin_module_names)"
Count built-in modules: 54
('_ast', '_bisect', '_codecs', '_collections', '_datetime', '_elementtree', '_functools', '_heapq', '_imp', '_io', '_locale', '_md5', '_operator', '_pickle', '_posixsubprocess', '_random', '_sha1', '_sha256', '_sha512', '_socket', '_sre', '_stat', '_string', '_struct', '_symtable', '_thread', '_tracemalloc', '_warnings', '_weakref', 'array', 'atexit', 'binascii', 'builtins', 'errno', 'faulthandler', 'fcntl', 'gc', 'grp', 'itertools', 'marshal', 'math', 'posix', 'pwd', 'pyexpat', 'select', 'signal', 'spwd', 'sys', 'syslog', 'time', 'unicodedata', 'xxsubtype', 'zipimport', 'zlib')
由于是在C编程语言上实现的(主要),因此不容易找到它,例如Python的模块sys(基于):



有关获取所有可用模块信息的更多信息,请参阅CPython,查看我的答案。

可以使用下面给定的代码块来完成,这是我认为最有效的方法

import sys
a = sys.builtin_module_names
print(a)
如果要打印,则要包括的最后一行。 这里,a是一个元组,因此它可以访问元组的所有功能

您可以查看sys.builtin\u模块\u名称以获取进一步帮助

当我了解到“builtin”的意思是“没有与此对象关联的源文件”时,我正在处理一个类似的问题

下面是一个基于手动检查/lib和/Dlls文件夹的解决方案。 使用“唯一”可能是多余的;这是因为我不确定DLL是否严格适用于python附带的包/它对于我试图解决的另一个问题(查找源包的需求)有用

从输入导入生成器开始,Iterable
导入操作系统、re、系统
def unique(iterable:iterable,generated:list=None)->生成器:
"""
迭代iterable的唯一元素
示例:
>>>[*唯一('abbccdddd')]
['a','b','c','d']
>>>[*唯一('abcd')]
['a','b','c','d']
"""
屈服=如果不存在屈服(屈服,类型(无))其他[]
因为我在iterable:
如果不是我的话:
产量一
附件(一)
def本机_模块()->生成器:
"""
找到的每个模块:
在安装的/lib和/DLLs目录下;排除/lib/site包下的所有/*
在sys.builtin\u模块\u名称中
"""
omitables='site packages\uuuu pycache\uuuu.pyo.ico.dll.pdb'.split()
path=lambda文件夹:os.path.join(sys.exec_前缀,文件夹)
tidy=lambda pth:os.path.split(os.path.splitext(pth)[0])[-1]#将名称与路径和扩展名(如果存在)分开
鉴别器=λpth:不存在(映射中i的重新匹配(i,pth)(重新转义,可省略))
lib=map(tidy,filter(discriminant,os.listdir(path('lib')))
dlls=map(tidy,filter(discriminant,os.listdir(path('dlls')))
收益率=[]
产量
来自唯一的收益(sys.builtin\u模块名称,收益)
来自唯一的产量(库,产量)
来自unique的产量(DLL,产量)

您可能还需要检查和命名约定“下划线”和“下划线”是相同的。使用
\u name
\u name
有一些约定。内置库中具有大写字符的函数/方法/名称的数量非常少。你的目标是什么?谢谢,文森特。我很想了解整个内置模块的功能,看看当前的命名情况:)在@VincentSavard对这个问题的评论的启发下添加了一条注释。谢谢,文森特。这些似乎不完整。例如,sys.builtin_module_name和pkgutil.iter_modules()都不包含“collections”或“os”(至少在Python 2.7中是这样)。有人能说出这是为什么吗?是否有一种解决方案可以返回原始问题全局模块索引中列出的所有内容?编辑:回答我的第一个问题,操作系统和集合是标准库的一部分,而不是内置的。这很有趣。在我的Python 2.7(以及3.8)上,
pkgutil.iter_modules()
确实包含
集合
操作系统
的条目。你有什么样的模块?那太尴尬了。用户错误。我只是在测试列表(pkgutil.iter_modules())中的
'collections',
,它返回了
False
。这非常令人惊讶。谢谢你的信息。我还将结果(不同方式的软件包数量)放入了我的原始帖子中。这只列出了一些模块,例如sys和time,但没有列出其他模块(例如os和random)。我没有列出im
import sys
a = sys.builtin_module_names
print(a)