Różnica między importowanym modułem i ładowaniem jest tym, co umieszcza się w obszarze nazw bieżącego modułu. Moduł zostanie załadowany tylko raz (w zwykłych sytuacjach), ale może być importowany wiele razy z wielu różnych miejsc. Załadowany moduł może nie być dostępny w danej przestrzeni nazw, jeśli nie został tam zaimportowany. Na przykład możesz załadować moduł bez importowania go pod jego nazwą, używając składni from module import name
(będziesz mieć dostęp do podanej nazwy, ale nie do samego modułu).
Widzisz moduł os
w słowniku sys.modules
, ponieważ jest on używany wewnętrznie przez interpretera Pythona i dlatego jest zawsze ładowany podczas uruchamiania. Nie można uzyskać do niego dostępu, używając nazwy "os", ponieważ nie jest ona automatycznie importowana do przestrzeni nazw.
Można jednak obejść normalne mechanizmy importu na kilka sposobów. Na przykład, spróbuj tego:
import sys
os = sys.modules["os"]
Będziesz teraz mieć dostęp do modułu os
tak jakbyś zrobił import os
.
To dlatego, że ten kod jest dokładnie tym, co robi instrukcja import
, gdy żądasz modułu, który został już załadowany. Jeśli jednak spróbujesz powyższego kodu z modułem, który nie jest jeszcze załadowany, nie zadziała (otrzymasz kluczowy błąd ze słownika sys.modules
). Instrukcja import
ładuje nowe moduły oprócz dodawania ich do bieżącego obszaru nazw. Chociaż możesz ręcznie ładować moduły i dalej pracować nad regularnym systemem importowania, rzadko istnieje dobry powód, aby to zrobić.
Otwórz zupełnie nową powłokę i przejdź przez kolejne kroki. Opisy postów lub, jeszcze lepiej, zrzuty ekranu. Moduł os nie znajduje się w systemie. –