Estou tentando determinar quais módulos do sistema Python estão carregados:
In [1]: import sys
In [2]: l = sorted(list(sys.modules.keys()))
In [3]: 'json' in l
Out[3]: True
De acordo com os documentos :
Este é um dicionário que mapeia nomes de módulos para módulos que já foram carregados.
Então pensei que talvez sys
imports json
, mas isso está errado:
In [4]: json.dumps({'oren': 12})
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[4], line 1
----> 1 json.dumps({'oren': 12})
NameError: name 'json' is not defined
O que estou perdendo?
sys.modules
lista todos os módulos que foram carregados no processo do interpretador atual. Notavelmente, ele não lista apenas os módulos do “sistema”, mas sim todos os módulos carregados - seja um módulo principal ou de terceiros. Ele também não lista os módulos até que eles tenham sido carregados (geralmente por meio de uma declaração de importação em algum outro módulo carregado).Isto é diferente da lista de nomes que foram importados para seu escopo atual por meio de uma
import
declaração. Somente nomes que foram importados podem ser usados diretamente. A declaração import pode importar nomes específicos de um módulo (por exemplo,from json import dumps
) e/ou renomear importações (por exemplo,import json as j
). Ambos são refletidos na tabela de símbolos local correspondente ao escopo da declaração import, mas não no sys.modules - em ambos os casos, somente o módulojson
estaria em sys.modules.Se você quiser saber o que é acessível ao seu escopo atual, tente a
vars()
função. Isso lista todos os nomes no escopo, incluindo nomes importados.Se você quiser saber quais módulos vêm com o Python, sua melhor aposta é consultar a documentação. Você pode verificar o diretório lib/python3.x que vem com sua distribuição Python, mas ele não estará completo (omite alguns módulos internos) e incluirá muitos módulos que são apenas para uso interno.