Import Anweisung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
kostonstyle
User
Beiträge: 148
Registriert: Sonntag 2. November 2008, 12:13

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
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

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. ;)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

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).
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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:
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

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+.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
kostonstyle
User
Beiträge: 148
Registriert: Sonntag 2. November 2008, 12:13

super es hat geklappt

vielen dank
Antworten