Seite 1 von 1

Import Anweisung

Verfasst: Montag 20. Juli 2009, 07:09
von kostonstyle
hallo miteinander
habe eine Frage zu der import Anweisung. Ich habe ein Modul mit Funktionen programmiert,
diese befindet sich im Paket(Verzeichnis) library. Nun möchte ich das Paket importieren.
Die Paketstruktur sieht wie folgt aus.
Mainorder
|
|-library(Paket)
| |-__init__.py
| |-module.py(Modul)
|
|-main.py

Möchte das Modul module.py in das main Programm einfügen, wie mache ich das?
Habe folgendes versucht, aber der Compiler motzt.....

from . module Lirary

Gruss kostonstyle

Verfasst: Montag 20. Juli 2009, 08:07
von cofi

Code: Alles auswählen

import library.module

Code: Alles auswählen

from library import module
http://docs.python.org/tutorial/modules.html#packages

Falls du 3.x benutzt solltest du noch http://docs.python.org/3.1/tutorial/mod ... l#packages lesen, da sich die relativen IMporte geaendert haben.

Verfasst: Montag 20. Juli 2009, 08:10
von ms4py

Code: Alles auswählen

import library

library.module.func()
In die __init__ dann

Code: Alles auswählen

import module

BTW: Du hast die Namen ja hoffentlich nur als Beispiel genommen und die Ordner und Datein heißen nicht wirklich so.

Edit: Zu langsam... So gehts natürlich auch. ;)

Verfasst: Montag 20. Juli 2009, 09:39
von cofi
ice2k3 hat geschrieben:library.module.func()[/code]

In die __init__ dann

Code: Alles auswählen

import module
Wie kommst du denn darauf? Die ``__init__.py`` darf leer sein, muss aber vorhanden sein, um ein Paket als Paket zu kennzeichen. Die Module muss man nicht importieren, allenfalls als Liste ``__all__`` definieren, um sie plattform-unabhaengig zu definieren - Windows baut da natuerlich Mist ;) - aber mehr dazu unter den Links.

Verfasst: Montag 20. Juli 2009, 11:35
von ms4py
Wenn ich das nicht mache, gibts die Exception ``Module "library" has no attribute "module"``. Ich importiere ja "library" und nicht "library.module", dann muss ich das so machen.

Ist natürlich Ansichtssache, wie man das macht, aber bei meinem Beispiel muss das in die __init__ rein (und vermutlich nicht nur unter Windows).

Verfasst: Montag 20. Juli 2009, 12:03
von cofi
Ja, entschuldige das hab ich ueberlesen.

Allerdings sollte man IMHO dem Paketbenutzer die Entscheidung ueberlassen, was er denn aus dem Paket benutzen will und ihm das nicht ueber die ``__init__.py`` aufzwingen.

Ausserdem: ``Explicit is better than implicit`` :twisted:

Verfasst: Dienstag 21. Juli 2009, 17:51
von birkenfeld
ice2k3 hat geschrieben:

Code: Alles auswählen

import library

library.module.func()
In die __init__ dann

Code: Alles auswählen

import module
Auch wenn mir diese Praxis nicht besonders gut gefällt, wenn man das schon so macht, sollte es auf jeden Fall ``from library import module`` sein. Das ist erstens explizit und zweitens zukunftssicher.

Wenn man ein Python, das explizite relative Imports kennt, verwendet, geht auch ``from . import module``, das ist allerdings nur 2.5+.

Verfasst: Mittwoch 22. Juli 2009, 10:28
von kostonstyle
super es hat geklappt

vielen dank