Seite 1 von 1

[newb frage] umgang mit modulen?

Verfasst: Donnerstag 13. Mai 2004, 11:51
von sorbitol
hi
ich hab vor 3 tagen angefangen mich mit python zu beschäftigen. klappt soweit auch
ganz gut. jedoch hab ich jetzt in einem tutorial gelesen das man möglichst viel mit
modulen arbeiten sollte(leutet mir auch ein). jetzt stellt sich mir nur das problem das
ich die module nicht laden kann. ich wollte sie so abspeichern das ich sie in meinem
home verzeichnis (nutze linux) unter
"programieren/python/programme/"programmname"/module"
habe, und wollte das ganze jetzt auch noch so aufbauen das das programm
immernoch funktioniert wenn ich den ordner "programmname" verschiebe.

hoffe ihr könnt mir helfen


mfg
sorb

Verfasst: Donnerstag 13. Mai 2004, 13:02
von Dookie
Hi sorb,

da musst Du den Pythonpath erweitern in Deinem Hauptscript.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import os, sys
sys.path.append(os.path.abspath('./module'))

#hier folgen die weiteren Importe, die nun auch aus dem module-Verzeichnis kommen können
Gruß

Dookie

Verfasst: Donnerstag 13. Mai 2004, 15:35
von Sorbitol
hi
danke für die schnelle antwort.
irgendwas mach ich hier jedoch noch falsch.

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: iso-8859-1 -*-
import os, sys 
sys.path.append(os.path.abspath('./module'))
import test

print 'Herzlich Wilkommen zum MBB-Programm'
beitrag = input('Wie hoch ist ihr monatlicher beitrag?: ')
alter = input("Wie alt ist das zu berechnende Mitglied?: ")
behinderung = raw_input('Ist Ihr Mitglied Behindert?: (J/N) ')
if behinderung == 'j':
    behigrad = input('Wie groß ist die Behinderung?: (20/30/50)%')
    if behigrad == 20:
        behierm = 0.80
    else:
        if behigrad == 30:
            behierm = 0.50
        else:
            if behigrad == 50:
                behierm = 0.25
    test.beiber(beitrag,behierm,alter)
else:
    behierm = 1
    test.beiber(beitrag,behierm,alter)
    
und diese fehler meldung spuckt er mir aus:

Code: Alles auswählen

Traceback (most recent call last):
  File "./abc.py", line 5, in ?
    import test
  File "/home/kamikaze/Programieren/Python/Programme/übungen/mitgliederbeitrag01/test.py", line 24, in ?
    test.beiber(beitrag,behierm,alter)
AttributeError: 'module' object has no attribute 'beiber'
dabei fällt mir gleich noch eine frage ein. muß ich ihm eigentlich im modul auch noch
mal sagen welchen interpreter er benutzen soll?

mfg
sorb

Verfasst: Donnerstag 13. Mai 2004, 17:03
von Dookie
Hi nochmal,

hast Du noch irgendwo eine test.py? Warscheinlich wird diese als Modul importiert und dort ist dann keine Funktion beiber definiert.

In einem zu importierenden Modul braucht kein Interpreter angegeben zu werden, wird aber trotzdem gemacht, weil es ja leicht möglich ist direkt im Modul eine Testroutine, die nur wenn das Script direkt (in der Console) gestartet wird einzubauen.


Gruß

Dookie

Verfasst: Donnerstag 13. Mai 2004, 17:03
von Milan
Hi. Es gibt bereits ein Pythonmodul, das "test" heißt. Du musst also einfach dein Modul anders nennen oder deinen eigenen Path vor die Pfade von Python stellen, indem du statt sys.path.append einfach sys.path.insert(0,os.path.abspath('./module')) benutzt (1. ist sauberer, da dann immer eindeutig das Modul geladen wird, was man erwartet).

Verfasst: Donnerstag 13. Mai 2004, 17:50
von Gast
hi
lag an dem modul namen "test" habs umbenannt jetzt gehts
besten dank für eure hilfe

mfg
sorb

Verfasst: Donnerstag 13. Mai 2004, 17:55
von sorbitol
hi
eine sache wär da noch :D
könntet ihr mir bitte erklären was diese zeile:
sys.path.append(os.path.abspath('./module'))
genau bedeutet oder mir ne seite empfehlen wo ich das nachlesen kann?

hoff ich fall euch net zu sehr aufn wecker :)


mfg
sorb

Verfasst: Donnerstag 13. Mai 2004, 18:12
von Dookie
sys.path ist eine Liste in der die Pfade stehen, in denen Python nach zu importierenden Modulen sucht. "append" ist eine Listenmethode, die ein Element zu einer Liste hinzufügt.
Die Funktion os.path.abspath() macht aus einem relativen Pfad wie "./module" einen absoluten Pfad wie "/home/kamikaze/Programieren/Python/Programme/übungen/mitgliederbeitrag01/module"
Die Ausgabe der Funktion wird dann direkt an sys.path.append als Parameter übergeben und so dieses Verzeichnis der Liste sys.path hinzugefügt.

Einzelne Funktionen aus Modulen kannst Du auch wunderbar in einer Console in der Python interaktiv läuft ausprobieren

Code: Alles auswählen

fritz@seneca:~$ python
Python 2.3.3 (#2, May  1 2004, 06:12:12)
[GCC 3.3.3 (Debian 20040401)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> print os.path.abspath("./")
/home/fritz
>>>
Gruß

Dookie

Verfasst: Donnerstag 13. Mai 2004, 18:21
von sorbitol
hi
besten dank für die erklärung. jetzt hab ich das verstanden :)

mfg
sorb