Seite 1 von 2

Wie erstelle ich ein eigenes modul?

Verfasst: Dienstag 13. Juni 2006, 13:55
von Thanatos83
Hallo Leute,

ich hab jetzt schon ziemlich lange suchmaschinen und die suchfunktion konsultiert, bin aber noch zu keinem vernünftigen ergebnis gekommen.

ich hab zwei dateien im gleichen Ordner:

tesselierung.py und modul.py (in dem eine Funktion namens "meinmodul" ist)

ich rufe tesselierung.py auf, in dem steht:

import blender
import os
import modul

from modul import *

Warum erhalte ich die Meldung: "No module named modul" ???

ich hab keine ahnung, wo der Fehler ist.

Danke im Vorraus

Verfasst: Dienstag 13. Juni 2006, 15:19
von DatenMetzgerX

Code: Alles auswählen

import blender
import os
import modul

from modul import * 
du importierst das modul 2 mal auf 2 verschiedene arten :roll:

entweder

Code: Alles auswählen

import modul
oder...

Code: Alles auswählen

from modul import *
Aber wieso es nicht geht...

Evtl wegen de Pfad angaben in ewlchen python suchen muss. Nim doch mal ein anderen Namen...

Verfasst: Dienstag 13. Juni 2006, 15:22
von STiGMaTa_ch
Ich finde "modul" einen schlechten Namen. Weiss nicht ob es in Python selber irgend ein Statement oder sowas gibt das genau gleich heisst. Meine Empfehlung:

Gibt dem Modul einen Sinnvollen Namen und mach dann das, was DatenMetzgerX gesagt hast. Entweder auf die eine oder andere Weise importieren...

Lieber Gruss
STiGMaTa

Verfasst: Dienstag 13. Juni 2006, 15:39
von Rebecca
Ich habe auch schonmal was fuer Blender mit Python programmiert, aber ich kann mich gerade nicht mehr erinnern, ob man da etwas Spezielles beachten muss, oder ob ich damals ueberhaupt ein eigenes Modul programmiert habe...

Hier mal ein kleines Beispiel, wie's ohne Blender funktioniert:
Code fuer meinmodul.py:

Code: Alles auswählen

def meinefunktion():
    pass
Code fuer meinprogramm.py:

Code: Alles auswählen

import meinmodul

meinmodul.meinefunktion()
Beides in den gleichen Ordner gepackt, meinprogramm ausgefuehrt (python meinprogramm.py) --> sollte funktionieren (nicht, dass das Programm viel macht, aber es sollte kein Fehler auftauchen.)

Du koenntest jetzt mal genau dieses Beispiel aus Blender heraus ausfuehren. Wenn's nicht klappt, liegt es an Blender. Wenn ich heute abend zu Hause bin, koennte ich mir meinen alten Blender-Kram nochmal anschauen, vielleicht finde ich was.

Verfasst: Dienstag 13. Juni 2006, 15:41
von Rebecca
Was mir gerade noch so einfaellt: Vielleicht hilft es ja, eine leere Datei namens __init__.py mit in den gleichen Ordner zu packen? :roll:

Verfasst: Dienstag 13. Juni 2006, 18:16
von Rebecca
Also, ich habe mein obiges Beispiel mal in Blender ausgefuehrt, und es funktioniert, indem ich einfach nur beide Dateien in den gleichen Ordner lege.
(Getestet mit: Linux 2.4.21-303-default, Python 2.3+, Blender 2.36)

Vielleicht ist deine Benamsung tatsaechlich unguenstig, vielleicht ueberschreibst du dir irgendwo irgendwas?

Verfasst: Dienstag 13. Juni 2006, 21:52
von Thanatos83
Hab jetzt andere Namen verwendet und die dateien sind immer noch im selben Ordner. Und ich habe auch ein Datei namens __init__.py mitreingepackt, aber es geht immer noch nicht.

Meldung: no module named meinmodule

Verfasst: Dienstag 13. Juni 2006, 22:45
von Dakre
normalerweise sucht der python interpreter nach und nach an drei orten:
1. das verzeichnis, indem sich der interpreter selbst befindet ( nicht das programm)
2. Verzeichnisse, die in der Umgebungsvariablen PYTHONPATH aufgeführt sind
3. Standardverzeichnis, das von python speziell für module vorgesehen ist... z.B. /usr/lib/python oder c:\python23\Lib

du kannst mal die path variable checken... das tust du mit:

Code: Alles auswählen

>>> import sys
>>> sys.path
dieses zeigt die systemvariable PYTHONPATH an...

normalerweise müsste das lokale verzeichnis dort sein... ansonsten versuch's mal mit sys.path.append(r'c:\....')

Verfasst: Mittwoch 14. Juni 2006, 07:50
von Rebecca
Dakre, Python sucht zu allererst in dem Verzeichnis, in dem das ausfuehrende Script liegt, deswegen muesste es eigentlich auch so klappen.

Thanatos, wenn du sonst nichts weiter in deinem Programm machst, bin auch ratlos. Wie gesagt, falls es mit dem normalen Python-Interpreter funktioniert (wuerde ich ruhig mal ausprobieren, denn Blender benutzt seinen eigenen Interpreter), liegt's an Blender, da wendest du dich am besten an Blender-Leute (oder versuchtst, eine neuere/andere Blender-Version zu installieren...)

Oder aber bei Windows laueft irgenwas anders als bein Linux?

Verfasst: Mittwoch 14. Juni 2006, 08:52
von pr0stAta
Halli Hallo, ich dachte zuerst auch es wäre noch viel einfacher...
Mit bissl probieren gings aber ^^

Hier mal ein kleines Beispiel das funktioniert, ob es schön ist - keine Ahnung :)

Code: Alles auswählen

#IchBinEinModul.py
class IchBinEinModul:
  def __init__(self, argument):
    self.__argument = argument
    
  def methode(self):
    return self.__argument

Code: Alles auswählen

#RufeModulAuf.py

import IchBinEinModul

abc = IchBinEinModul.IchBinEinModul(5)
print abc.methode()
Rufe ich nun die RufeModulAuf.py auf gibt er mir in der Console:

Code: Alles auswählen

C:\Test\Python\>RufeModulAuf.py
5
Gruss

Verfasst: Mittwoch 14. Juni 2006, 10:44
von jens
Es ist nicht so, das zwangsweise in einem Modul eine Klasse mit gleichem namen stecken muß!

Ich hab im Wiki mal ein weiteres Beispiel gemacht: [wiki]Modul Import#WeiteresBeispiel[/wiki]

Verfasst: Mittwoch 14. Juni 2006, 12:14
von cime
Hi,

könntest du mal die exakte Fehlermeldung (komplett) plus die Position der Dateien und die kompletten import-Befehle hinschreiben.
Vielleicht können wir dir dann helfen.

mfg
cime

Verfasst: Mittwoch 14. Juni 2006, 13:23
von Joghurt
Kann es sein, dass Blenders Python nicht im aktuellen Verzeichnis nach modulen sucht?
@Thathanos: Was ergibt

Code: Alles auswählen

import sys
print sys.path

Verfasst: Mittwoch 14. Juni 2006, 19:14
von Dakre
Rebecca hat geschrieben:Dakre, Python sucht zu allererst in dem Verzeichnis, in dem das ausfuehrende Script liegt, deswegen muesste es eigentlich auch so klappen.
das tut er nur, weil normalerweise die "working directory" in PYTHONPATH gespeichert wird... deshalb ja meine empfehlung ähnlich wie joghurts doch mal in sys.path nachzugucken, ob sie drin steht...

Verfasst: Montag 19. Juni 2006, 11:44
von tromai
Hallo zusammen,

ich denke meine Frage passt hier einigermaßen rein. Ich würde gerne ein Modul importieren. das Problem ist, dass das ganze nicht dort liegt wo das Programm liegt und er es nicht findet.
Wie kann ich bei einem Importbefehl einen Pfad mit angeben?

Sorry, hab mich beim suchen vertippt und deshalb nichts gefunden. Hat sich also erledigt.
Hier trotzdem die Lösung:

Code: Alles auswählen

sys.path.append('/path/to/file')
import xyz