Seite 1 von 1
import mit '.' ?
Verfasst: Dienstag 24. Februar 2015, 11:02
von MoonKid
Ich sehe in einigen Codes
Wofür steht der Punkt? Ist something in dem Fall eine Klasse oder ein Modul - oder wäre beides möglich?
Bei der Doku finde ich keinen sinnvollen Eintrag - wobei er sicherlich existiert. Hab im
Index nach "import" gesucht.
Re: import mit '.' ?
Verfasst: Dienstag 24. Februar 2015, 11:09
von /me
Schau mal im Tutorial nach "
Intra-package references".
Re: import mit '.' ?
Verfasst: Dienstag 24. Februar 2015, 11:41
von MoonKid
Da steig ich nicht ganz dahinter. Es werden also Module, keine Klassen, importiert? Hab ich das soweit richtig verstanden?
Es kann relativ zum aktuellen Modul (so wie in einem Dateisystem) importiert werden.
'.' bedeutet also im gleichen Verzeichnis bzw. der gleichen Ebene.
Bei meinem Verständnis sind diese beiden imports dann genau gleich
Daher verstehe ich nicht, warum man das überhaupt tun sollte.
Re: import mit '.' ?
Verfasst: Dienstag 24. Februar 2015, 11:46
von sparrow
Nicht wenn der 1. import in einem Modul aufgerufen wird, dass sich nicht in der obersten Ebene befindet.
Wie du schon sagst, wie einem Dateisystem.
# tree
.
|-- sub
| |-- __init__.py
| |-- modc.py
| |-- modd.py
`-- test.py
# cat test.py
from sub import modc
# cat sub/modc.py
import modd
# python3 test.py
Traceback (most recent call last):
File "test.py", line 1, in <module>
from sub import modc
File "/tmp/test/sub/modc.py", line 1, in <module>
import modd
ImportError: No module named modd
# echo "from . import modd" > sub/modc.py
# python3 test.py
#
Re: import mit '.' ?
Verfasst: Dienstag 24. Februar 2015, 12:00
von BlackJack
@MoonKid: Stell Dir vor es gibt ein systemweites Modul `spam` und eines im Package `parrots`. Und im Packache `parrots` gibt es ein Modul `frob` und das verwendet ein ``import spam``. Welches `spam`-Modul wird da importiert? Bei ``from . import spam`` ist klar welches: das im Package.
Re: import mit '.' ?
Verfasst: Mittwoch 25. Februar 2015, 09:36
von jens
"from . import XY" sollte man sich angewöhnen, was?
Aber welche Python Version geht das eigentlich? War doch irgendwann neu, oder?
btw. wie bekommt man PyCharm dazu, das automatisch zu machen?
EDIT: Kann es wohl noch nicht:
Schade...
Re: import mit '.' ?
Verfasst: Freitag 27. Februar 2015, 20:17
von DasIch
BlackJack hat geschrieben:@MoonKid: Stell Dir vor es gibt ein systemweites Modul `spam` und eines im Package `parrots`. Und im Packache `parrots` gibt es ein Modul `frob` und das verwendet ein ``import spam``. Welches `spam`-Modul wird da importiert? Bei ``from . import spam`` ist klar welches: das im Package.
Grundsätzlich sollte man allerdings ohnehin ``from __future__ import absolute_import`` nutzen, dann ist auch bei einem ``import spam`` klar was gemeint ist.