Ich bin neu in Python. Ich entwickle ein kleines Projekt. Ich muss Kodierungsstandards folgen, beginnend auf Stationen. Wie man import
Anweisungen richtig verwendet. Jetzt arbeite ich an Python 2.7. Wenn ich nach 3.x gehe, gibt es Konflikte mit absoluten Importen? Und was ist der Unterschied zwischen absoluten und relativen Importen?Was ist absoluter Import in Python?
Antwort
Die Unterscheidung zwischen absolute
und relative
, die hier gezeichnet wird, ist sehr ähnlich zu der Art, wie wir über absolute und relative Dateipfade oder sogar URLs sprechen.
absolute Eine {import, Pfad, URL} sagt Ihnen genau, wie das, was Sie nach sind zu bekommen, in der Regel von jedem Teil festgelegt wird: genau
import os, sys
from datetime import datetime
from my_package.module import some_function
Relative {Importe, Pfade, URLs} sind was sie sagen sie sind: sie sind relativ an ihren aktuellen Standort. Das heißt, wenn sich die Verzeichnisstruktur ändert oder die Datei verschoben wird, können diese brechen (weil sie nicht mehr dasselbe bedeuten).
from .module_in_same_dir import some_function
from ..module_in_parent_dir import other_function
Daher werden absolute Importe für Code bevorzugt, der geteilt wird.
Ich wurde in den Kommentaren gebeten, ein Beispiel dafür, wie from __future__ import absolute_import
Bindungen in diesen zu schaffen, und wie ist gemeint, verwendet werden. Als ich versuchte, dieses Beispiel zu formulieren, wurde mir klar, dass ich sein Verhalten auch nicht erklären konnte, also ich asked a new question. This answer gibt ein Codebeispiel, das eine korrekt funktionierende Implementierung von from __future__ import absolute_import
zeigt, in der es tatsächlich eine Mehrdeutigkeit auflöst.
The accepted answer geht ausführlicher darüber, warum dies so funktioniert, einschließlich einer Diskussion über den verwirrenden Wortlaut des Python 2.5 changelog. Im Wesentlichen ist der Anwendungsbereich dieser Richtlinie (und damit die Unterscheidung zwischen absoluten und relativen Importen in Python) sehr, sehr eng. Wenn Sie feststellen, dass Sie diese Unterscheidungen benötigen, damit Ihr Code funktioniert, ist es wahrscheinlich besser, wenn Sie Ihr lokales Modul nach Möglichkeit umbenennen.
Das hätte ich auch gedacht. Aber wenn das der Fall ist, warum funktionieren die Importe der letztgenannten Form noch, wenn ich "from __future__ import (absolute_import)" habe? – orome
@raxacoricofallapatorius Angenommen, Sie haben ein lokales Modul namens 'string'. Sie öffnen einen Interpreter und geben "import string" aus. Python 2.5 würde Ihnen das lokale Modul geben. Python 2.7+ würde Ihnen die [string] (https://docs.python.org/2/library/string.html) Bibliothek geben. Diese zukünftige Anweisung verschiebt Python 2.5 in das Standardverhalten von 2.7. Die gepunkteten Formen sind explizit relativ, so dass keine Zweideutigkeit mit der Standardbibliothek möglich ist. Daher arbeiten sie immer gleich. [Mehr] (https://docs.python.org/2.5/whatsnew/pep-328.html) –
Ah ich sehe, 'von __future__ absolute_import' verbietet * implizite * relative Importe (explizite sind in Ordnung). Richtig? – orome
- 1. Python relativ/absoluter Import (wieder)
- 2. Python - absoluter Import für das Modul im selben Verzeichnis
- 3. Was macht "von MODUL import _" in Python?
- 4. TypeScript - was ist 'Export Import'?
- 5. Import in Python
- 6. Python-Import in __init __()
- 7. Was ist $ in Python?
- 8. Import Fehler in Python
- 9. Import Fehler in Python
- 10. Python Import beim Import cv2
- 11. Was kann das Objekt in "Import Item" in Python sein?
- 12. Was macht `` six.moves Import von Urllib 'in Python?
- 13. Absoluter Weg in Angularjs
- 14. Import Medien auf Python gibt Import Fehler
- 15. Absoluter Wert in vb.net
- 16. Absoluter Pfad in RewriteRule
- 17. Python Import Strich Modul
- 18. _sha import in python hashlib
- 19. Python Basemap Import Fehler
- 20. Was ist Epochenzeit in Python?
- 21. Import Reihenfolge in Python 3
- 22. Python-Import-Module, Ordnerstrukturen
- 23. Python-Import-Anweisung Semantik
- 24. Warum ist Lazy Import nicht Standard in Python?
- 25. Import Arabisch Wordnet in Python
- 26. Import Boto3 Fehler in Python
- 27. Python Import fehlschlägt Openpyxl
- 28. von sys Import argv - was ist die Funktion von "Skript"
- 29. Absoluter Importfehler in einem Unterpaket, das einen stdlib-Paketnamen überschattet
- 30. Python: Import-Modul
Können Sie bitte klarstellen, was absolute und relative Importe sind? –
@ Ol'Reliable Sie werden in [PEP 328] (http://legacy.python.org/dev/peps/pep-0328/) beschrieben. –