La diferencia entre un módulo que se está importando y que se está cargando es lo que se coloca en el espacio de nombres de su módulo actual. Un módulo solo se cargará una vez (en situaciones normales), pero se puede importar muchas veces, desde diferentes lugares. Un módulo cargado puede no ser accesible en un espacio de nombres determinado, si no se ha importado allí. Por ejemplo, puede cargar un módulo sin importarlo bajo su nombre usando la sintaxis from module import name
(podrá acceder al nombre especificado, pero no al módulo en sí).
Está viendo el módulo os
en el diccionario sys.modules
porque es utilizado internamente por el intérprete python, por lo que siempre se carga al inicio. Sin embargo, no puede acceder utilizando el nombre "os", ya que no se importa automáticamente en su espacio de nombres.
Sin embargo, puede omitir los mecanismos normales de importación de varias maneras. Por ejemplo, intente esto:
import sys
os = sys.modules["os"]
ahora será capaz de acceder al módulo os
igual que si hubiera hecho import os
.
Esto se debe a que el código es exactamente lo que hace una instrucción import
cuando solicita un módulo que ya se ha cargado. Sin embargo, si prueba el código anterior con un módulo que aún no está cargado, no funcionará (obtendrá un error clave del diccionario sys.modules
). La instrucción import
carga nuevos módulos además de agregarlos al espacio de nombre actual. Si bien puede cargar módulos manualmente y trabajar más con el sistema de importación regular, rara vez hay una buena razón para hacerlo.
Abre una carcasa nueva y sigue los pasos. Publicar descripciones o, mejor aún, capturas de pantalla. El módulo os no reside en sys. –