Eigene Module erstellen

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
Slim Shady
User
Beiträge: 15
Registriert: Dienstag 15. November 2016, 22:36
Wohnort: Wuppertal

Hallo,

Ich arbeite gerade zu Übungszwecken an meinem eigenen Programm, mit dem man sich morgens ein Frühstück zusammenstellen kann.
Dieses Programm möchte ich nun, da es schon einige Zeit fertig ist, mit einer Menüfunktion ausstatten. Ich möchte diesen Menüscript mit Listen realisieren (Auch nur zu Übungszwecken) und ihn in einer seperaten Datei auslagern. Ich habe sie also menue.py genannt und zu Testzwecken

Code: Alles auswählen

print ("Test!")
geschrieben, um sicherzustellen, dass alles geklappt hat.
Wenn ich aber mit import menue.py die Datei, die im gleichen Verzeichnis wie die Hauptdatei liegt, aufrufen will, gibt er mir diesen Error aus:

Traceback (most recent call last):
File "/root/Schreibtisch/Python/Noels Sammelsurium tatsächlich nützlicher Anwendungen/Frühstücksmenu/Frühstück_Version_2.py", line 2, in <module>
import menue.py
ImportError: No module named 'menue.py'; 'menue' is not a package

Allerdings steht trotzdem über den Error noch "Test", was ja heißt das er das ja irgendwie aufgerufen haben muss.
Wie kann ich ihn dazu bringen, die Datei korrekt aufzurufen?

Außerdem: Wenn ich den importierten Script dann an einer bestimmten Stelle im Hauptcode aufrufen möchte, kann ich da ja nicht einfach das machen, oder?:
menue()

Weil ich die Funktion gar nicht definiert habe, oder?

Ich entschuldige mich im vorraus, wenn das alles ein wenig wirr klingt, ich bin noch ein blutiger Anfänger.
:!: :?:
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dein Problem ist, dass du mit ".py" importierst. Das ist nicht so gedacht, ein Modul mit Dateinamen "menue.py" importiert man mit "import menue".

Dadurch das du "import menue.py" machst, versucht Python zuerst ein *Paket* menue zu importieren. Es findet dein Modul "menue.py", fuehrt also auch das print aus. Dann versucht es das Unter-Modul oder Paket "menue.py" zu importieren - und das gibt's ja nunmal nicht.

Also einfach das .py weg lassen, und dann sollte alles klappen.
Slim Shady
User
Beiträge: 15
Registriert: Dienstag 15. November 2016, 22:36
Wohnort: Wuppertal

Danke, dass hat geklappt! :)
Eine Frage noch; Wenn ich den Code jetzt importiere, wird dieser direkt nach import menue ausgeführt. Wie kann ich ihn so lenken, das er erst nach einem Funktionsaufruf ( menue() ?) angezeigt wird. bzw. wenn der User sich ein Menü zusammen stellen will?
:!: :?:
BlackJack

@Slim Shady: In dem Du eine Funktion schreibst die man nach dem Importieren erst aufrufen muss.
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Gemeint ist konkret Folgendes:

modul.py

Code: Alles auswählen

def say_hallo(name):
    print("Hallo {}!".format(name))
main.py

Code: Alles auswählen

from modul import say_hallo

say_hallo("Slim Shady")
Antworten