¿Cómo se enumeran todos los módulos importados?¿Cómo enumerar los módulos importados?
E.g. Me gustaría obtener [ 'OS', 'sys'] porque de este código
import os
import sys
¿Cómo se enumeran todos los módulos importados?¿Cómo enumerar los módulos importados?
E.g. Me gustaría obtener [ 'OS', 'sys'] porque de este código
import os
import sys
import sys
sys.modules.keys()
Una aproximación de conseguir todas las importaciones para el módulo actual sólo sería para inspeccionar globals()
para módulos:
import types
def imports():
for name, val in globals().items():
if isinstance(val, types.ModuleType):
yield val.__name__
Esto no devolverá las importaciones locales, o las importaciones sin módulo como from x import y
. Tenga en cuenta que esto devuelve val.__name__
para que obtenga el nombre del módulo original si usó import module as alias
; nombre de rendimiento en su lugar si desea el alias.
O puede encontrar la intersección de sys.modules con globales, y no hacer ninguna prueba de tipo. – Marcin
Finalmente, creo que es mejor usar 'list (imports())' para enumerar todos los módulos importados. –
Esta es la única solución que devuelve el nombre completo del módulo cuando se redefine el nombre de su módulo importado. Por ejemplo, si 'importa numpy como np', esto devolverá' numpy' mientras que las otras dos sugerencias devolverán 'np'. –
print [key for key in locals().keys()
if isinstance(locals()[key], type(sys)) and not key.startswith('__')]
Encuentra la intersección de sys.modules
con globals
:
import sys
modulenames = set(sys.modules)&set(globals())
allmodules = [sys.modules[name] for name in modulenames]
¿Tal vez use un 'frozenset' aquí en su lugar? - Aquí está mi 1-liner: 'frozenset (imap (nombre lambda: modules [nombre], frozenset (módulos) & frozenset (globals())))' –
de que realmente funciona bastante bien con:
import sys
mods = [m.__name__ for m in sys.modules.values() if m]
Esto creará una lista con importables nombres de los módulos.
Si quieres hacer esto desde fuera del script:
from modulefinder import ModuleFinder
finder = ModuleFinder()
finder.run_script("myscript.py")
for name, mod in finder.modules.iteritems():
print name
Esto imprimirá todos los módulos cargados por myscript.py.
¿Alguna idea de por qué esto se degrada? –
Este código enumera los módulos importados por su módulo:
import sys
before = [str(m) for m in sys.modules]
import my_module
after = [str(m) for m in sys.modules]
print [m for m in after if not m in before]
Debe ser útil si desea saber qué módulos externos a instalar en un nuevo sistema para ejecutar el código, sin la necesidad de intentar una y otra de nuevo.
No mostrará el módulo sys
ni los módulos importados de él.
Digamos que haya importado matemáticas y re:
matemáticas importación, re
ahora a ver el mismo uso
de impresión (dir())
Si lo ejecuta antes de la importación y después de la importación, se puede ver la diferencia.
Bienvenido a StackOverflow: si publica código, XML o muestras de datos, resalte esas líneas en el editor de texto y haga clic en el botón "muestras de código" ({}) en la barra de herramientas del editor o use Ctrl + K en su teclado formato y sintaxis resaltarlo! – WhatsThePoint
A veces (por ejemplo, con 'ipython --pylab') el intérprete python se inicia con los módulos predefinidos cargados. Queda la pregunta, para saber cómo se conoce el alias usado o_O – yota
No creo que sea posible en Python nativo, pero esta pregunta anterior podría ayudar: http: // stackoverflow.com/questions/2572582/return-a-list-of-imported-python-modules-used-in-a-script – parent5446