Wie erstelle ich ein eigenes modul?
-
- User
- Beiträge: 12
- Registriert: Dienstag 9. Mai 2006, 18:56
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
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!!!
Rettet die Wälder, esst mehr Biber!!!
- DatenMetzgerX
- User
- Beiträge: 398
- Registriert: Freitag 28. April 2006, 06:28
- Wohnort: Zürich Seebach (CH)
Code: Alles auswählen
import blender
import os
import modul
from modul import *
entweder
Code: Alles auswählen
import modul
Code: Alles auswählen
from modul import *
Evtl wegen de Pfad angaben in ewlchen python suchen muss. Nim doch mal ein anderen Namen...
- STiGMaTa_ch
- User
- Beiträge: 32
- Registriert: Sonntag 14. Mai 2006, 22:58
- Wohnort: Rueti ZH, Schweiz
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
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)
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
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 fuer meinprogramm.py:
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.
Hier mal ein kleines Beispiel, wie's ohne Blender funktioniert:
Code fuer meinmodul.py:
Code: Alles auswählen
def meinefunktion():
pass
Code: Alles auswählen
import meinmodul
meinmodul.meinefunktion()
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.
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
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?
(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?
-
- User
- Beiträge: 12
- Registriert: Dienstag 9. Mai 2006, 18:56
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
Meldung: no module named meinmodule
Cu Thanatos83
Rettet die Wälder, esst mehr Biber!!!
Rettet die Wälder, esst mehr Biber!!!
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:
dieses zeigt die systemvariable PYTHONPATH an...
normalerweise müsste das lokale verzeichnis dort sein... ansonsten versuch's mal mit sys.path.append(r'c:\....')
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
normalerweise müsste das lokale verzeichnis dort sein... ansonsten versuch's mal mit sys.path.append(r'c:\....')
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
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?
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?
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
Rufe ich nun die RufeModulAuf.py auf gibt er mir in der Console:
Gruss
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()
Code: Alles auswählen
C:\Test\Python\>RufeModulAuf.py
5
Kann es sein, dass Blenders Python nicht im aktuellen Verzeichnis nach modulen sucht?
@Thathanos: Was ergibt
@Thathanos: Was ergibt
Code: Alles auswählen
import sys
print sys.path
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...Rebecca hat geschrieben:Dakre, Python sucht zu allererst in dem Verzeichnis, in dem das ausfuehrende Script liegt, deswegen muesste es eigentlich auch so klappen.
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:
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.
Du kannst den Pfad, in der die neuen Module
liegen einfach hinzufügen und danach die besagten importieren.
liegen einfach hinzufügen und danach die besagten importieren.
Code: Alles auswählen
sys.path.append(PFAD)
import modul_aus_pfad
-
- User
- Beiträge: 12
- Registriert: Dienstag 9. Mai 2006, 18:56
Das funktionert zwar, ist aber noch keine perfekte lösung. Gibt es denn keine möglichkeit den Pfad des Scriptes per Befehl rauszufinden?
Oder vielleicht relative Pfadangaben?
Es geht darum, dass ich das Script weitergeben will/muss, und es dann ohne umstellung auch vom anderen Rechner aus funktioniert.
Oder vielleicht relative Pfadangaben?
Es geht darum, dass ich das Script weitergeben will/muss, und es dann ohne umstellung auch vom anderen Rechner aus funktioniert.
Cu Thanatos83
Rettet die Wälder, esst mehr Biber!!!
Rettet die Wälder, esst mehr Biber!!!
Gibt es:Thanatos83 hat geschrieben:Gibt es denn keine möglichkeit den Pfad des Scriptes per Befehl rauszufinden?
Code: Alles auswählen
import os
print "Ich liege in", os.path.dirname(os.path.abspath(__file__))
-
- User
- Beiträge: 90
- Registriert: Sonntag 26. Januar 2003, 11:34
- Wohnort: Großbeeren (nahe Berlin)
Also ich weiß ja, wie sehr ihr alle das Diskutieren um dieses Thema liebt und ich möchte euch auch nicht den Spaß verderben, aber vielleicht ist es sinnvoller sich vor dem Schreiben des Moduls einige Fragen zu stellen:
1. Was muss mein Modul leisten?
2. Ist es notwendig? Gibt es vielleicht schon andere Lösungen?
3. Wie bekomme ich es übersichtlich und strukturiert hingeschrieben?
4. ...
Ich habe ganz ehrlich gesagt Bauchweh, wenn in deiner einen Datei nur importiert wird. Ging es dir nur um die Theorie des Importierens/ Moduls oder wolltest du nur damit spielen?
Ich persönlich finde es viel angenehmer, wenn du in deiner "Hauptdatei" ruhig oben die Importierungen stehen hast.
Vorteil ist, dass du auf einen Blick siehst, was du importierst und wie usw.
Es erspart dir beim Fehler suchen zusätzlich enorm Zeit, weil du nicht immer die "Importierdatei" neben dein Programm legen musst...
Aber vielleicht sind das ja auch nur meine Auffassungen...
Also: Programmiert sauba Jungs (+Rebecca)
1. Was muss mein Modul leisten?
2. Ist es notwendig? Gibt es vielleicht schon andere Lösungen?
3. Wie bekomme ich es übersichtlich und strukturiert hingeschrieben?
4. ...
Ich habe ganz ehrlich gesagt Bauchweh, wenn in deiner einen Datei nur importiert wird. Ging es dir nur um die Theorie des Importierens/ Moduls oder wolltest du nur damit spielen?
Ich persönlich finde es viel angenehmer, wenn du in deiner "Hauptdatei" ruhig oben die Importierungen stehen hast.
Vorteil ist, dass du auf einen Blick siehst, was du importierst und wie usw.
Es erspart dir beim Fehler suchen zusätzlich enorm Zeit, weil du nicht immer die "Importierdatei" neben dein Programm legen musst...
Aber vielleicht sind das ja auch nur meine Auffassungen...
Also: Programmiert sauba Jungs (+Rebecca)