[newb frage] umgang mit modulen?

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
sorbitol

Donnerstag 13. Mai 2004, 11:51

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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Donnerstag 13. Mai 2004, 13:02

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
Sorbitol

Donnerstag 13. Mai 2004, 15:35

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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Donnerstag 13. Mai 2004, 17:03

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
Zuletzt geändert von Dookie am Donnerstag 13. Mai 2004, 17:05, insgesamt 1-mal geändert.
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Donnerstag 13. Mai 2004, 17:03

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).
Gast

Donnerstag 13. Mai 2004, 17:50

hi
lag an dem modul namen "test" habs umbenannt jetzt gehts
besten dank für eure hilfe

mfg
sorb
sorbitol

Donnerstag 13. Mai 2004, 17:55

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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Donnerstag 13. Mai 2004, 18:12

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
sorbitol

Donnerstag 13. Mai 2004, 18:21

hi
besten dank für die erklärung. jetzt hab ich das verstanden :)

mfg
sorb
Antworten