ti-enxame.com

Como obter uma lista de módulos internos em python?

Eu gostaria de obter uma lista de nomes de módulos internos em python, de modo que eu possa testar a popularidade das convenções de nomenclatura da função (sublinhado, CamelCase ou mixedCase).

Eu sei que há um Global Module Index , mas eu estou querendo saber se existe uma lista de seqüências de caracteres, o que é mais fácil de usar :)

Atualização:

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

Os nomes dos módulos compilados estão em sys.builtin_module_names . Para todos os módulos importáveis, consulte pkgutil.iter_modules .

Execute-os de uma forma limpa virtualenv para obter (quase) apenas os módulos que vêm com o próprio Python.


Observe que uma “pesquisa de popularidade” incluirá necessariamente módulos que usam convenções de nomenclatura antigas e desencorajadas porque foram escritas antes das diretrizes de hoje serem implementadas e não podem ser alteradas porque precisam ser compatíveis com versões anteriores. Pode ser útil para algo, mas não para responder a perguntas sobre práticas recomendadas, como “Como devo nomear minhas funções?”. Para isso, veja o PEP8, o guia de estilo Python , especialmente a seção “Convenções de Nomenclatura”.

40
Petr Viktorin

Que tal agora? No entanto, isso obtém uma lista de funções e variáveis ​​internas em vez de módulos ...

dir(__builtins__)

help('modules') lhe dará uma lista de todos os módulos, de acordo com Como posso obter uma lista de módulos Python instalados localmente? . Não é uma lista de strings, no entanto.

14
U-DON

Agora há um pacote de terceiros para isso. Ele raspa o TOC da página da Biblioteca Padrão nos documentos oficiais do Python e cria uma lista.

Você pode instalá-lo usando pip

pip install stdlib_list

e tenho uma lista de bibliotecas

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']

Você pode encontrar código fonte aqui .

8
ChillarAnand

>>>dir (__builtins__)

ou

>>>help (__builtins__)

5
shengnan.wang

Dos CPython`s docs :

Todos os módulos internos conhecidos estão listados em sys.builtin_module_names

Os nomes dos módulos em sys.builtin_module_names são reais apenas para o interpretador Python a usado:

Um Tuple de strings dando os nomes de todos os módulos que são compilados neste interpretador Python

Cada módulo integrado usa o carregador especial durante a importação: 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)

No Python 3, o número de módulos internos aumentou ligeiramente 

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

Como o CPython é implementado (primário) na linguagem de programação C, então não é fácil encontrá-lo, como por exemplo a localização do módulo sys do Python (baseado em this answer ):

$ locate sysmodule | grep python
/usr/include/python2.7/sysmodule.h
/usr/include/python3.4m/sysmodule.h
/usr/local/include/python3.5m/sysmodule.h

Mais informações sobre como obter informações sobre todos os módulos disponíveis é o CPython, veja na minha resposta aqui .

2
Seti Volkylany

Isso pode ser feito usando o bloco de código dado abaixo e é a maneira mais eficaz como por mim.

import sys
a = sys.builtin_module_names
print(a)

A última linha a ser incluída se você quiser imprimi-las. Aqui, uma é uma Tuple e assim ela pode acessar todas as funcionalidades de uma Tupla.

Você pode dar uma olhada em sys.builtin_module_names para ajuda adicional https://docs.python.org/3/library/sys.html

0
Akash Kumar