Às vezes, o ipython --pylabinterpretador python (ex: with ) é iniciado com os módulos predefinidos carregados. Restos pergunta, pois como saber o alias usado o_O
Yota
Respostas:
182
import sys
sys.modules.keys()
Uma aproximação de obter todas as importações apenas para o módulo atual seria inspecionar os globals()módulos:
import types
def imports():for name, val in globals().items():if isinstance(val, types.ModuleType):yield val.__name__
Isso não retornará importações locais, ou importações que não sejam de módulo, como from x import y. Observe que isso retorna val.__name__para que você obtenha o nome do módulo original, se você usou import module as alias; em vez disso, se desejar o alias.
Ou você pode encontrar a interseção de sys.modules com globals e não fazer nenhum tipo de teste.
Marcin
Essa é a única solução que retorna o nome completo do módulo quando você redefine o nome do seu módulo importado. Por exemplo, se você fizer import numpy as npisso, isso retornará numpyenquanto as outras duas sugestões retornarão np.
Joelostblom
1
Se, por algum motivo, você precisar do nome do módulo e do alias, isso estará disponível na namevariável Assim, para gerar a string, import numpy as npfaça algo como 'import %s as %s' % (val.__name__, name)onde a declaração de rendimento está agora.
André C. Andersen
38
Encontre a interseção de sys.modulescom globals:
import sys
modulenames = set(sys.modules)& set(globals())
allmodules =[sys.modules[name]for name in modulenames]
Talvez use um frozensetaqui em vez disso? - Aqui está o meu liner:frozenset(imap(lambda name: modules[name], frozenset(modules) & frozenset(globals())))
AT
A solução acima não extrai os módulos que estão sendo importados usando o fromcomando Por exemplo, considere from scipy.stats import norm. Isso não me diz que o normmódulo é importado. Como isso pode ser incorporado a isso?
Ujjwal
@Ujjwal Bem, esses módulos não estão sendo importados, apenas seus componentes. Se você precisar de tudo, use sys.modules.
Marcin
28
Se você quiser fazer isso de fora do script:
Python 2
from modulefinder importModuleFinder
finder =ModuleFinder()
finder.run_script("myscript.py")for name, mod in finder.modules.iteritems():print name
Python 3
from modulefinder importModuleFinder
finder =ModuleFinder()
finder.run_script("myscript.py")for name, mod in finder.modules.items():print(name)
Isso imprimirá todos os módulos carregados pelo myscript.py.
Roubando do @Lila (não foi possível fazer um comentário devido à falta de formatação), isso também mostra o / path / do módulo:
#!/usr/bin/env pythonimport sys
from modulefinder importModuleFinder
finder =ModuleFinder()# Pass the name of the python file of interest
finder.run_script(sys.argv[1])# This is what's different from @Lila's script
finder.report()
que produz:
NameFile--------...
m token /opt/rh/rh-python35/root/usr/lib64/python3.5/token.py
m tokenize /opt/rh/rh-python35/root/usr/lib64/python3.5/tokenize.py
m traceback /opt/rh/rh-python35/root/usr/lib64/python3.5/traceback.py
...
.. adequado para grepping ou o que você tem. Esteja avisado, é longo!
Eu gosto de usar uma compreensão de lista neste caso:
>>>[w for w in dir()if w =='datetime'or w =='sqlite3']['datetime','sqlite3']# To count modules of interest...>>> count =[w for w in dir()if w =='datetime'or w =='sqlite3']>>> len(count)2# To count all installed modules...>>> count = dir()>>> len(count)
ipython --pylab
interpretador python (ex: with ) é iniciado com os módulos predefinidos carregados. Restos pergunta, pois como saber o alias usado o_ORespostas:
Uma aproximação de obter todas as importações apenas para o módulo atual seria inspecionar os
globals()
módulos:Isso não retornará importações locais, ou importações que não sejam de módulo, como
from x import y
. Observe que isso retornaval.__name__
para que você obtenha o nome do módulo original, se você usouimport module as alias
; em vez disso, se desejar o alias.fonte
import numpy as np
isso, isso retornaránumpy
enquanto as outras duas sugestões retornarãonp
.name
variável Assim, para gerar a string,import numpy as np
faça algo como'import %s as %s' % (val.__name__, name)
onde a declaração de rendimento está agora.Encontre a interseção de
sys.modules
comglobals
:fonte
frozenset
aqui em vez disso? - Aqui está o meu liner:frozenset(imap(lambda name: modules[name], frozenset(modules) & frozenset(globals())))
from
comando Por exemplo, considerefrom scipy.stats import norm
. Isso não me diz que onorm
módulo é importado. Como isso pode ser incorporado a isso?Se você quiser fazer isso de fora do script:
Python 2
Python 3
Isso imprimirá todos os módulos carregados pelo myscript.py.
fonte
.iteritems()
para.items()
e suportes para a instrução de impressãofonte
digamos que você importou matemática e re:
agora para ver o mesmo uso
Se você executá-lo antes e depois da importação, é possível ver a diferença.
fonte
Na verdade, está funcionando muito bem com:
Isso criará uma lista com nomes de módulos importáveis .
fonte
Este código lista os módulos importados pelo seu módulo:
Deve ser útil se você quiser saber quais módulos externos instalar em um novo sistema para executar seu código, sem a necessidade de tentar novamente.
Não listará o
sys
módulo ou os módulos importados dele.fonte
Roubando do @Lila (não foi possível fazer um comentário devido à falta de formatação), isso também mostra o / path / do módulo:
que produz:
.. adequado para grepping ou o que você tem. Esteja avisado, é longo!
fonte
Eu gosto de usar uma compreensão de lista neste caso:
fonte