Как получить список встроенных модулей в python?

Я хотел бы получить список имен встроенных модулей в python, чтобы я мог проверить популярность соглашений об именах функций (underline, CamelCase или mixedCase).

Я знаю, что есть Глобальный индекс модуля, но мне интересно, есть ли список строк, который проще в использовании:)

Update:

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

Ответ 1

Имена скомпилированных модулей находятся в sys.builtin_module_names. Для всех импортируемых модулей см. pkgutil.iter_modules.

Запустите их в чистом virtualenv, чтобы получить (почти) только модули, которые поставляются с самим Python.


Обратите внимание, что "опрос популярности" обязательно будет включать в себя модули, которые используют старые, обескураженные соглашения об именах, поскольку они были написаны до того, как сегодня были введены в действие правила и не могут измениться, поскольку они должны быть обратно совместимы. Это может быть полезно для чего-то, но не для ответа на такие передовые практические вопросы, как "Как мне назвать мои функции?". Для этого см. PEP8, руководство по стилю Python, особенно раздел "Соглашения об именах".

Ответ 3

Теперь для этого есть сторонний пакет. Он сбрасывает TOC на странице стандартной библиотеки в официальных документах Python и создает список.

Вы можете установить его, используя 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']

Здесь вы можете найти исходный код.

Ответ 4

>>>dir (__builtins__)

или

>>>help (__builtins__)

Ответ 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)

В 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')

Поскольку 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

Более подробная информация о получении информации обо всех доступных модулях - это CPython, посмотрите в моем ответе здесь.

Ответ 6

Это можно сделать, используя данный блок кода ниже, и это самый эффективный способ для меня.

import sys
a = sys.builtin_module_names
print(a)

Последняя строка, которая будет включена, если вы хотите напечатать их. Здесь a является кортежем, и поэтому он может получить доступ ко всем функциям кортежа.

Вы можете посмотреть sys.builtin_module_names для дальнейшей помощи https://docs.python.org/3/library/sys.html