Was macht 'six.moves import von urllib' in Python?

9

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?

    
Dims 25.01.2016, 09:36
quelle

1 Antwort

25

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.

    
karlson 25.01.2016 09:54
quelle

Tags und Links