Im reference manual wird angegeben, dass:Unterschied zwischen einem geladenen Modul und einem initialisierten Modul?
Ein komplettes Python-Programm wird in einer minimal initialisiert Umgebung ausgeführt: alle eingebauten und Standardmodule zur Verfügung, aber keine initialisiert wurden, mit Ausnahme von
sys
(verschiedenes System Dienste),builtins
(eingebaute Funktionen, Ausnahmen und keine) und__main__
.
Ich bin unsicher, was "initialisiert" hier bedeuten soll. Ich habe immer gedacht, dass ein Modul initialisiert wurde, wenn es geladen wurde und in sys.modules
:
Dies ist ein Wörterbuch, das Modulnamen zu Modulen abbildet, die bereits geladen wurden.
Anscheinend war ich falsch, weil sys.modules
viele andere Module enthält:
python -c "import sys; print(sys.modules.keys() - {'sys', 'builtins', '__main__'})"
{'_stat', 'encodings.aliases', '_sitebuiltins', '_thread', 'io', '_weakrefset', 'genericpath', 'encodings.utf_8', 'codecs', 'os', '_weakref', '_codecs', '_frozen_importlib', '_io', '_frozen_importlib_external', 'os.path', '_warnings', '_bootlocale', '_signal', 'errno', '_imp', 'encodings.latin_1', 'sysconfig', 'marshal', 'encodings', 'usercustomize', 'site', 'posixpath', '_collections_abc', 'posix', '_sysconfigdata_m_linux_x86_64-linux-gnu', 'encodings.cp437', 'abc', 'zipimport', 'stat', '_locale'}
Was ist der Unterschied zwischen einem initialisiert und ein geladenes Modul? Ich bin auf Python 3.
Sieht so aus, ziemlich merkwürdig, dass es keine Beachtung gefunden hat, wenn man bedenkt, dass es explizit in den Dokumenten für "import", [speziell für 'modul .__ spec__'] verlinkt ist (https://docs.python.org/3/ referenz/import.html #__ spec__), die vor kurzem aktualisiert wurde. –
Mind auf den "Unterschied zwischen einem initialisierten und einem geladenen Modul" pro Frage erweitern? AFAIK Ein initialisiertes Modul hat seine [Anweisungen ausgeführt] (https://docs.python.org/3.6/tutorial/modules.html#more-on-modules), während ein geladenes Modul nur in der Symboltabelle verfügbar ist. – Alex
@Alex: Die [Systemreferenz importieren] (https://docs.python.org/3/reference/import.html#loading) beschreibt den Ladevorgang so, dass er die Initialisierung umfasst, so dass "geladen" und "initialisiert" werden "sind gleichwertig. Ich würde jedoch von der Python-Dokumentation keine vollständige Konsistenz erwarten; Diese Begriffe, insbesondere "geladen", sollten im Zusammenhang betrachtet werden, um zu bestimmen, was die Dokumente zu sagen versuchen. Zum Beispiel enthält 'sys.modules 'Module, die nicht vollständig in dem Sinne geladen wurden, in dem die Import-Systemdokumente den Begriff verwenden. – user2357112