Seite 1 von 1

import

Verfasst: Donnerstag 12. Oktober 2017, 19:56
von Üpsilon
Bin schon seit Jahren bei Python, wurde aber dennoch letztens überrascht.

Wieso funktioniert z.B.

Code: Alles auswählen

from sklearn import cluster
aber

Code: Alles auswählen

import sklearn
sklearn.cluster
nicht?

Die Python-Doku über import hat mir bis jetzt nicht zur Klarheit verholfen.

Liebe Grüße!

Re: import

Verfasst: Donnerstag 12. Oktober 2017, 19:59
von Sirius3
@Üpsilon: Unterpakete werden nicht automatisch importiert, wenn man das Hauptpaket importiert. So wird nur das importiert, was auch gebraucht wird.

Re: import

Verfasst: Donnerstag 12. Oktober 2017, 23:36
von snafu
sklearn.cluster funktioniert nur, wenn zuvor in sklearn ein import cluster gemacht wurde. Der Punktoperator sorgt nicht automatisch dafür, dass ein Untermodul (oder -paket) verfügbar ist. Dies funktioniert grundsätzlich nur beim import-Statement, d.h. die Angabe von import sklearn.cluster tut das, was du erwartest.

Re: import

Verfasst: Freitag 13. Oktober 2017, 21:19
von Üpsilon
Verstehe ich das richtig:
Mit dem Punkt kann man Werte aus einem Modul holen, nicht aber Unterpackages aus einem Package.
Außer beim import, wo man den Punkt benutzt, um den "Pfad" zum Modul anzugeben.

Re: import

Verfasst: Freitag 13. Oktober 2017, 21:53
von __deets__
Genau. Es ist etwas verwirrend durch Module wie os welches sein untermodul path Gleich mit importiert.

Re: import

Verfasst: Freitag 13. Oktober 2017, 21:54
von Üpsilon
Okay dankeschön :D

Re: import

Verfasst: Freitag 13. Oktober 2017, 23:13
von snafu
Üpsilon hat geschrieben:Mit dem Punkt kann man Werte aus einem Modul holen, nicht aber Unterpackages aus einem Package.
Wie gesagt: Wenn das Unterpackage den Import bereits in __init__.py getätigt hat, dann ist das kein Thema. Dann funktioniert auch dies:

Code: Alles auswählen

import spam
print(spam.ham.eggs.get_foo())