In Python 2 Ich kann ein Modul wie folgt erstellen:Wie importiere ich aus einer Datei im aktuellen Verzeichnis in Python 3?
parent
->module
->__init__.py (init calls 'from file import ClassName')
file.py
->class ClassName(obj)
Und das funktioniert. In Python 3 kann ich dasselbe vom Kommandointerpreter aus tun und es funktioniert (edit: Das funktionierte, weil ich im selben Verzeichnis war, in dem der Interpreter lief). Allerdings, wenn ich __ init __.py und tun das Gleiche wie das schaffen:
"""__init__.py"""
from file import ClassName
"""file.py"""
class ClassName(object): ...etc etc
I Import erhalten: kann nicht importieren Namen ‚Classname‘, es nicht sehen ‚Datei‘ überhaupt. Es wird dies tun, sobald ich das Modul importiere, obwohl ich alles importieren kann, indem ich es direkt referenziere (was ich nicht tun möchte, da es völlig inkonsistent mit dem Rest unserer Codebasis ist). Was gibt?
das funktioniert, dachte es eine Art Suchpfad Problem. Das ist die Sache, die wir in Python 3 nur deshalb geändert haben. Vielen Dank. –
Das ist eine gute Veränderung. Es bedeutet, dass Sie Submodule haben können, die denselben Namen wie ein Basismodul in der Python-Core-Bibliothek haben, z. 'mymodule.io', und alle Importe für' io' sind vollständig spezifiziert, und Python importiert nicht willkürlich das falsche Modul, da sich die Reihenfolge der Liste der zu importierenden Pfade geändert hat. – Dunes
Ja, ich denke, das ist wahr, ein Modul mit dem gleichen Namen wie ein Basismodul zu benennen, ist um jeden Preis zu vermeiden, es sei denn, du implementierst es neu, aber ich kann sehen, wie "oops wir das falsche Modul importiert" vermeiden. –