Wie erstelle ich ein eigenes modul?

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.
Thanatos83
User
Beiträge: 12
Registriert: Dienstag 9. Mai 2006, 18:56

Wie erstelle ich ein eigenes modul?

Beitragvon Thanatos83 » Dienstag 13. Juni 2006, 13:55

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
Cu Thanatos83

Rettet die Wälder, esst mehr Biber!!!
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Beitragvon DatenMetzgerX » Dienstag 13. Juni 2006, 15:19

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...
Benutzeravatar
STiGMaTa_ch
User
Beiträge: 32
Registriert: Sonntag 14. Mai 2006, 22:58
Wohnort: Rueti ZH, Schweiz

Beitragvon STiGMaTa_ch » Dienstag 13. Juni 2006, 15:22

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
EDV-Systeme verarbeiten, womit sie gefüttert werden. Kommt Mist rein, kommt Mist raus. (André Kostolany)
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Dienstag 13. Juni 2006, 15:39

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.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Dienstag 13. Juni 2006, 15:41

Was mir gerade noch so einfaellt: Vielleicht hilft es ja, eine leere Datei namens __init__.py mit in den gleichen Ordner zu packen? :roll:
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Dienstag 13. Juni 2006, 18:16

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?
Thanatos83
User
Beiträge: 12
Registriert: Dienstag 9. Mai 2006, 18:56

Beitragvon Thanatos83 » Dienstag 13. Juni 2006, 21:52

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
Cu Thanatos83



Rettet die Wälder, esst mehr Biber!!!
Dakre
User
Beiträge: 16
Registriert: Dienstag 13. Juni 2006, 22:40

Beitragvon Dakre » Dienstag 13. Juni 2006, 22:45

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:\....')
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Mittwoch 14. Juni 2006, 07:50

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?
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Beitragvon pr0stAta » Mittwoch 14. Juni 2006, 08:52

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
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 14. Juni 2006, 10:44

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]

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
cime
User
Beiträge: 152
Registriert: Dienstag 24. Mai 2005, 15:49

Beitragvon cime » Mittwoch 14. Juni 2006, 12:14

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
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Mittwoch 14. Juni 2006, 13:23

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
Dakre
User
Beiträge: 16
Registriert: Dienstag 13. Juni 2006, 22:40

Beitragvon Dakre » Mittwoch 14. Juni 2006, 19:14

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...
Benutzeravatar
tromai
User
Beiträge: 92
Registriert: Mittwoch 26. April 2006, 11:20

Beitragvon tromai » Montag 19. Juni 2006, 11:44

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
Zuletzt geändert von tromai am Montag 19. Juni 2006, 13:14, insgesamt 1-mal geändert.

Wer ist online?

Mitglieder in diesem Forum: martinjo