Autor |
Python Funktion aufrufen |
|
Bekell
Aktiv  Dabei seit: 05.09.2008 Mitteilungen: 3144
 | Themenstart: 2023-02-08
|
hallo, hab eine Funktion geschrieben, die funktioniert und in einer Datei namens Funktion.py gespeichert.
im selben Verzeichnis hab ich ein Program-Datei, die die Def_Funktion aufruft.
ich hab die Datei eingebunden mit import Def_Funktion.py aber er sagt:
ModuleNotFoundError: No module named 'Def_Funktion.py'; 'Def_Funktion' is not a package"
Damit kann ich nun nichts anfangen. Was könnte man als Troubleshooting probieren?
Chat GPT ist mit seiner Weisheit am Ende...
|
Profil
|
PeterMeier123
Aktiv  Dabei seit: 09.07.2018 Mitteilungen: 193
 | Beitrag No.1, eingetragen 2023-02-08
|
Ist das eine Scherzfrage und ich habe etwas nicht verstanden? 🤔
Falls das kein Scherz sein soll:
Der Inhalt von "Funktion.py" könnte so aussehen:
\sourceon Python
def testFunktion():
print("Hallo")
\sourceoff
In deiner Testdatei ich nenne sie "Test.py" könnte dann der Inhalt so aussehen, wenn du die testFunktion aus Funktion.py aufrufen möchtest:
\sourceon Python
from Funktion import testFunktion
# ...
testFunktion()
# ...
\sourceoff
Eine andere Möglichkeit wäre mit "import Funktion as fkt" zu arbeiten, dann müsste man die testFunktion so aufrufen "fkt.testFunktion()"
Du kannst natürlich auch so arbeiten "import Funktion" und rufst das mit "Funktion.testFunktion()" auf.
Das sollte eigentlich alles gehen. Ich habe das jetzt selbst einmal mit einem Beispiel durchexerziert.
Gibt es irgendwelche speziellen Verzeichnisstrukturen oder Dateiberechtigungen?
|
Profil
|
Bekell
Aktiv  Dabei seit: 05.09.2008 Mitteilungen: 3144
 | Beitrag No.2, vom Themenstarter, eingetragen 2023-02-08
|
Ich habe hundertmal mit anderen Programmen gemacht, und es hat funktioniert. Aber Heute funkioniert es halt nicht. Hab schon alle Grossbuchstaben gegen kleine getauscht, Verzeichnisse und Namen stimmen. Das "#!/usr/bin/env python3" hab ich auch drin... Was tun, eventuell hat es damit zu tun, dass die aufrufende Datei eine Excel Datei öffnet, und da soll die Funktion dann was reinschreiben ....
nochnicht gelöst das Problem....
|
Profil
|
MontyPythagoras
Senior  Dabei seit: 13.05.2014 Mitteilungen: 3273
Wohnort: Werne
 | Beitrag No.3, eingetragen 2023-02-08
|
Hallo Bekell,
ich zitiere Dich:
\quoteon(2023-02-08 13:35 - Bekell im Themenstart)
in einer Datei namens Funktion.py gespeichert
\quoteoff
\quoteon(2023-02-08 13:35 - Bekell im Themenstart)
eingebunden mit import Def_Funktion.py
\quoteoff
Vielleicht speicherst Du es in einer Datei namens "Def_Funktion.py" statt "Funktion.py", dann wird "import Def_Funktion.py" vielleicht auch funktionieren? Python sagt: "ModuleNotFoundError: No module named 'Def_Funktion.py'" Klarer geht es doch nicht.
Ciao,
Thomas
|
Profil
|
Bekell
Aktiv  Dabei seit: 05.09.2008 Mitteilungen: 3144
 | Beitrag No.4, vom Themenstarter, eingetragen 2023-02-08
|
\quoteon Klarer geht es doch nicht.Thomas
\quoteoff
So sieht der Funktionsaufruf in der aufrufenden Programm aus:
https://matheplanet.com/matheplanet/nuke/html/uploads/c/23651_A_Funkrionsaufruf.png
So sieht der Funkionsname im selben Verzeichnis wie aufrufendes Programm aus:
https://matheplanet.com/matheplanet/nuke/html/uploads/c/23651_AVerzeichnisbild.png
Und so sieht der Funktionskopf in der Funktionsdatei aus:
https://matheplanet.com/matheplanet/nuke/html/uploads/c/23651_A_Funktionskopf.png
Weiterhin kommt:
ModuleNotFoundError: No module named 'def_Tabmaker.py'; 'def_Tabmaker' is not a package
|
Profil
|
MontyPythagoras
Senior  Dabei seit: 13.05.2014 Mitteilungen: 3273
Wohnort: Werne
 | Beitrag No.5, eingetragen 2023-02-08
|
Hallo Bekell,
warum beschreibst Du dann das Problem ganz anders in Deinem Threadstart? Lass Dir aus dem aufrufenden Programm heraus zum Beispiel mit os.listdir() anzeigen, welche Module er denn kennt und findet. Oder in welchem Pfad er überhaupt sucht. Leg zum Beispiel noch eine zweite Datei an, die Du dann importierst (oder auch nicht, wenn es fehlschlägt). Wenn da noch andere Module sind, die Du erfolgreich importieren kannst, leg die def_Tabmaker.py in den gleichen Ordner, wo die anderen importierten Module liegen. Ich vermute, Python sucht an der falschen Stelle. Das sagt zumindest die Fehlermeldung.
Ciao,
Thomas
|
Profil
|
Bekell
Aktiv  Dabei seit: 05.09.2008 Mitteilungen: 3144
 | Beitrag No.6, vom Themenstarter, eingetragen 2023-02-08
|
Ich hab:
\sourceon nameDerSprache
\numberson
import os
DateienOrdner = os.listdir()
print(DateienOrdner )
\sourceoff
gemacht, funktioniert auch nicht....
ich hab eins Verzeichnis in besagtem Verzeichnis, es heisst: "_pycache_"
Da ist folgendes drin:
https://matheplanet.com/matheplanet/nuke/html/uploads/c/23651_A_VerzeichnisCache.png
Was heisst denn das? Ich hab das Verzeichnis weder angelegt, noch die Dateien dorthin abgespeichert.
Heute scheint schwarzer Tag zu sein, erst hat alles so gut geklappt, und nun schon 5 Stunden das...
|
Profil
|
Knaaxx
Senior  Dabei seit: 06.05.2006 Mitteilungen: 2728
 | Beitrag No.7, eingetragen 2023-02-08
|
Hallo
Denke Monthy hat die richtige Vermutung. Das Ding wird nicht gefunden weil nicht im Pfad.
Du kannst auch das mal probieren
\sourceon nameDerSprache
import sys
sys.path.append('Verzeichnispfad ohnE die Funktionsdatei-Datei')
\sourceoff
[Die Antwort wurde vor Beitrag No.6 begonnen.]
|
Profil
|
schnitzel
Senior  Dabei seit: 26.02.2009 Mitteilungen: 223
 | Beitrag No.8, eingetragen 2023-02-08
|
Wenn deine Datei Funktion.py und die Funktion darin Def_Funktion heißt, musst du sie mit
from Funktion import Def_Funktion
aufrufen. Wenn du da irgendwelche Punkte mit einbaust, ist das für python ein "Pfad" in einem Package.
Gruß
|
Profil
|
Bekell
Aktiv  Dabei seit: 05.09.2008 Mitteilungen: 3144
 | Beitrag No.9, vom Themenstarter, eingetragen 2023-02-08
|
Hab das in der aufrufenden Datei im Kopf:
\quoteon from def_Tabmaker.py import def_Tabmaker
\quoteoff
und das ist der Aufruf:
\quoteon def_Tabmaker(1,2,3,4)
\quoteoff
Es passiert nichts...
Das sagte er:
\quoteon No module named 'def_Tabmaker.py'; 'def_Tabmaker' is not a package
\quoteoff
Es ist merkwürdig, weil sie sich beide Dateien wirklich im selben Verzeichnis befinden.
was meint er denn genau, wenn er sagt: "Def_Tabmaker is not a package." Ich hab ja schon mindestens 100 Mal selber externe Funktionen programmiert und woanders eingebaut. Aber dafür noch nie eine Anleitung zum Bauen einer Package benötigt...
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4404
 | Beitrag No.10, eingetragen 2023-02-08
|
\quoteon(2023-02-08 20:03 - Bekell in Beitrag No. 9)
\quoteon from def_Tabmaker.py import def_Tabmaker
\quoteoff
\quoteoff
Das Modul, das eine Datei foo.py definiert, heisst nicht foo.py , sondern foo .
|
Profil
|