A veces (por ejemplo, con ipython --pylab) el intérprete de Python se inicia con módulos predefinidos cargados. Queda la pregunta, sobre cómo saber el alias utilizado o_O
yota
Respuestas:
182
import sys
sys.modules.keys()
Una aproximación para obtener todas las importaciones para el módulo actual solo sería inspeccionar los globals()módulos:
import types
def imports():for name, val in globals().items():if isinstance(val, types.ModuleType):yield val.__name__
Esto no devolverá importaciones locales, o importaciones que no sean módulos como from x import y. Tenga en cuenta que esto regresa val.__name__para que obtenga el nombre del módulo original si lo usó import module as alias; en su lugar, escriba el nombre si desea el alias.
O puede encontrar la intersección de sys.modules con globals, y no realizar ninguna prueba de tipo.
Marcin
Esta es la única solución que devuelve el nombre completo del módulo cuando redefine el nombre de su módulo importado. Por ejemplo, si lo hace import numpy as np, esto regresará numpymientras que las otras dos sugerencias regresarán np.
joelostblom
1
Si por alguna razón necesita tanto el nombre del módulo como el alias, está disponible en la namevariable. Por lo tanto, para generar la cadena, import numpy as nphaga algo como 'import %s as %s' % (val.__name__, name)donde está ahora la declaración de rendimiento.
André C. Andersen
38
Encuentre la intersección de sys.modulescon globals:
import sys
modulenames = set(sys.modules)& set(globals())
allmodules =[sys.modules[name]for name in modulenames]
Tal vez use un frozensetaquí en su lugar? - Aquí está mi 1-liner:frozenset(imap(lambda name: modules[name], frozenset(modules) & frozenset(globals())))
EN
La solución anterior no extrae los módulos que se importan con el fromcomando. Por ejemplo, considere from scipy.stats import norm. Esto no me dice que el normmódulo se importa. ¿Cómo se puede incorporar eso a esto?
Ujjwal
@Ujjwal Bueno, esos módulos no se importan, solo sus componentes. Si necesita todo, solo use sys.modules.
Marcin
28
Si quieres hacer esto desde fuera del 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)
Esto imprimirá todos los módulos cargados por myscript.py.
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 ifnot m in before]
Debería ser útil si desea saber qué módulos externos instalar en un nuevo sistema para ejecutar su código, sin la necesidad de intentarlo una y otra vez.
No enumerará el sysmódulo o módulos importados de él.
Robando a @Lila (no se pudo hacer un comentario debido a que no se ha formateado), esto también muestra la ruta / del 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 produce:
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
...
.. adecuado para grepping o lo que tengas. ¡Ten cuidado, es largo!
Me gusta usar una lista de comprensión en este 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
) el intérprete de Python se inicia con módulos predefinidos cargados. Queda la pregunta, sobre cómo saber el alias utilizado o_ORespuestas:
Una aproximación para obtener todas las importaciones para el módulo actual solo sería inspeccionar los
globals()
módulos:Esto no devolverá importaciones locales, o importaciones que no sean módulos como
from x import y
. Tenga en cuenta que esto regresaval.__name__
para que obtenga el nombre del módulo original si lo usóimport module as alias
; en su lugar, escriba el nombre si desea el alias.fuente
import numpy as np
, esto regresaránumpy
mientras que las otras dos sugerencias regresaránnp
.name
variable. Por lo tanto, para generar la cadena,import numpy as np
haga algo como'import %s as %s' % (val.__name__, name)
donde está ahora la declaración de rendimiento.Encuentre la intersección de
sys.modules
conglobals
:fuente
frozenset
aquí en su lugar? - Aquí está mi 1-liner:frozenset(imap(lambda name: modules[name], frozenset(modules) & frozenset(globals())))
from
comando. Por ejemplo, considerefrom scipy.stats import norm
. Esto no me dice que elnorm
módulo se importa. ¿Cómo se puede incorporar eso a esto?Si quieres hacer esto desde fuera del script:
Python 2
Python 3
Esto imprimirá todos los módulos cargados por myscript.py.
fuente
.iteritems()
a.items()
y soportes para la instrucción printfuente
Digamos que has importado matemáticas y re:
ahora para ver el mismo uso
Si lo ejecuta antes de la importación y después de la importación, se puede ver la diferencia.
fuente
En realidad está funcionando bastante bien con:
Esto creará una lista con nombres de módulos importables .
fuente
Este código enumera los módulos importados por su módulo:
Debería ser útil si desea saber qué módulos externos instalar en un nuevo sistema para ejecutar su código, sin la necesidad de intentarlo una y otra vez.
No enumerará el
sys
módulo o módulos importados de él.fuente
Robando a @Lila (no se pudo hacer un comentario debido a que no se ha formateado), esto también muestra la ruta / del módulo /:
que produce:
.. adecuado para grepping o lo que tengas. ¡Ten cuidado, es largo!
fuente
Me gusta usar una lista de comprensión en este caso:
fuente