La differenza tra un modulo importato e in fase di caricamento è ciò che viene inserito nello spazio dei nomi del modulo corrente. Un modulo verrà caricato una sola volta (in situazioni ordinarie), ma può essere importato più volte, da molti luoghi diversi. Un modulo caricato potrebbe non essere accessibile in un determinato spazio dei nomi, se non è stato importato lì. Ad esempio, puoi caricare un modulo senza importarlo sotto il suo nome usando la sintassi from module import name
(sarai in grado di accedere al nome specificato, ma non al modulo stesso).
Vedete il modulo os
nel dizionario sys.modules
perché è utilizzato internamente dall'interprete python e quindi è sempre caricato all'avvio. Non puoi accedervi usando il nome "os", perché non viene importato automaticamente nel tuo spazio dei nomi.
Tuttavia, è possibile ignorare i normali meccanismi di importazione in alcuni modi. Per esempio, provate questo:
import sys
os = sys.modules["os"]
Ora sarete in grado di accedere al modulo os
proprio come se si fosse realizzato import os
.
Questo perché il codice è esattamente ciò che fa un'istruzione import
quando si richiede un modulo che è già stato caricato. Tuttavia, se provi il codice sopra con un modulo che non è ancora stato caricato, non funzionerà (riceverai un errore chiave dal dizionario sys.modules
). L'istruzione import
carica nuovi moduli oltre ad aggiungerli allo spazio dei nomi corrente. Mentre è possibile caricare manualmente i moduli e aggirare ulteriormente il normale sistema di importazione, raramente c'è una buona ragione per farlo.
Aprire una nuova shell e passare attraverso i passaggi. Post descrizioni o, meglio ancora, schermate. Il modulo os non risiede in sys. –