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

Dra*_*uan 40 python

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

我知道有一个全局模块索引,但我想知道是否有一个字符串列表,这更容易使用:)

更新:

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

Pet*_*rin 45

编译的模块名称在sys.builtin_module_names.对于所有可导入模块,请参阅pkgutil.iter_modules.

在干净的情况下运行它们virtualenv(几乎)只获得Python本身附带的模块.


请注意,"流行度调查"必然包括使用旧的,不鼓励的命名约定的模块,因为它们是在今天的指南实施之前编写的,并且由于需要向后兼容而无法更改.它可能对某些内容有用,但不适用于回答最佳实践问题,例如"我应该如何命名我的功能?".为此,请参阅PEP8,Python样式指南,尤其是"命名约定"部分.


U-D*_*DON 18

这个怎么样?虽然,这里有一个内置函数和变量列表而不是模块......

dir(__builtins__)
Run Code Online (Sandbox Code Playgroud)

help('modules')将根据我如何获取本地安装的Python模块列表,为您提供所有模块的列表?.但不是字符串列表.


Chi*_*and 9

现在有一个第三方包.它在官方Python文档中删除了标准库页面的TOC并构建了一个列表.

您可以使用pip安装它

pip install stdlib_list
Run Code Online (Sandbox Code Playgroud)

并获得了一个库列表

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']
Run Code Online (Sandbox Code Playgroud)

你可以在这里找到源代码.

  • 这是相当惊人的。感谢您提供此信息。我还将结果(不同方式的包数)放入我的原始帖子中。 (2认同)

小智 7

>>>dir (__builtins__)

要么

>>>help (__builtins__)


PAD*_*MKO 5

来自CPython 的文档

所有已知的内置模块都列在 sys.builtin_module_names 中

中的模块名称sys.builtin_module_names实际上仅适用于使用的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)
Run Code Online (Sandbox Code Playgroud)

在Python 3中内置模块的数量略有增加

$ 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')
Run Code Online (Sandbox Code Playgroud)

由于CPython是在 C 编程语言上实现(主要)的,因此不容易找到它,例如定位 Python 的模块 sys (基于此答案):

$ locate sysmodule | grep python
/usr/include/python2.7/sysmodule.h
/usr/include/python3.4m/sysmodule.h
/usr/local/include/python3.5m/sysmodule.h
Run Code Online (Sandbox Code Playgroud)

有关获取有关所有可用模块的信息的更多信息是 CPython,请在此处查看我的答案。