Ich habe die folgende Zeile im Python-Code gefunden:
%Vor% Gleichzeitig kann ich urllib.py
überall finden. Ich fand, dass es eine Datei six.py
im Paket root gibt und class Module_six_moves_urllib(types.ModuleType):
inside hat.
Ist es das? Wie ist das definiert?
AKTUALISIEREN
Tut mir leid, ich bin neu in Python und die Frage bezieht sich auf Python-Syntax. Ich habe gelernt, dass was nach import
ist Python-Dateiname ohne eine py
Erweiterung. Also, wo ist diese Datei in diesem Fall?
six ist ein Paket, das beim Schreiben von Code hilft, der sowohl mit Python 2 als auch mit Python 3 kompatibel ist.
>Eines der Probleme, mit denen Entwickler beim Schreiben von Code für Python2 und 3 konfrontiert sind, besteht darin, dass sich die Namen mehrerer Module aus der Standardbibliothek geändert haben, obwohl die Funktionalität gleich geblieben ist.
Das Modul six.moves
stellt diese Module unter einem gemeinsamen Namen für Python2 und 3 zur Verfügung (meist indem das Python2-Modul unter dem Namen des Python 3-Moduls bereitgestellt wird).
Also deine Linie
%Vor% importiert urllib
bei der Ausführung mit Python3 und importiert eine Mischung aus urllib
, urllib2
und urlparse
mit Python2, wobei die Struktur von urllib
von Python3 nachgeahmt wird. Siehe auch hier .
BEARBEITEN um das Update der Frage zu beantworten:
TLDR; Es besteht nicht unbedingt eine direkte Beziehung zwischen dem importierten Modul urllib
und einer Datei im Dateisystem in diesem Fall. Die relevante Datei ist genau, worauf six.__file__
zeigt.
Module von Drittanbietern werden in einer Datei / einem Verzeichnis definiert
aufgeführt in sys.path
. Die meiste Zeit können Sie den Namen der Datei finden, aus der ein Modul importiert wird, indem Sie das __file__
-Attribut des fraglichen Moduls, z.B. %Code%. Aber mit six.__file__
sind die Dinge nicht so einfach, gerade weil die exponierten Module tatsächlich nicht eins zu eins zu tatsächlichen Python-Modulen abbilden, sondern gehackte Versionen von diesen.
Tags und Links python