Python-Scripts aus einem Unterordner in Script einbinden

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
Cow
User
Beiträge: 5
Registriert: Montag 10. August 2009, 10:41

Hey,

Nehmen wir an, ich hab einen Arbeitsordner "Projekt 1". In diesem Ordner befinden sich eine Script "Start.py" und ein Unterordner "lib". Nun möchte ich in mein Script Start.py ein Script aus meiner lib einbinden, so als wäre der gesamte Code in meinem Start-Script und sollt dort auch so ausgeführt werden(auch Klassendefinitionen). Ich hab versucht in Google weiterzukommen, hat aber nichts genützt.

Kann mir jemand sagen, wie genau das geht?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Les mal zum Thema "Packages" in der Dokumentation.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Diese BadPractise aus PHP solltest du dir ganz schnell abgewöhnen :) In Python arbeitet man mit Modulen und hält seinen Adressraum schön sauber.

Wenn es gar nicht anders geht: "from lib.somescript import *"
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Defnull hat geschrieben:Wenn es gar nicht anders geht: "from lib.somescript import *"
Dazu sollte man aber sage, dass es _immer_ anders geht, wenn nicht hat man mit Sicherheit einen Designfehler.

Da sich Pakete in Python3 nicht geaendert haben, gibts die Doku sogar uebersetzt: http://tutorial.pocoo.org/modules.html#pakete

Englisch (Python2.6): http://docs.python.org/tutorial/modules.html#packages
Cow
User
Beiträge: 5
Registriert: Montag 10. August 2009, 10:41

Tut mir Leid, ich hab garnichts verstanden, und ich weiß auch nicht, was das, was ihr gepostet habt, mit dem zu tun hat, was ich meine.

Eigentlich hat das, was ich suche, nur den Sinn, dass ich nicht den ganzen Code in ein Script packen will, das spart nämlich die Zeit, nach irgendwelchen bestimmten Stellen zu suchen und macht es viel übersichtlicher. Also fänd ich es geschickt, wenn ich zum beispiel eine große Klasse in einer .py Datei abspeichern und diese dann ganz einfach mit einem Befehl in mein Script einbinden könnte.

Bei Ruby ist das ja auch kein Problem

Code: Alles auswählen

require 'lib/MeineKlasse.rb'
include MeineKlasse
nach sowas hatte ich eher gesucht.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Und genau das hat Python nicht.
Du solltest vielleicht den ganzen Abschnitt ueber Module im Tutorial lesen.

Die Kurzform ist, dass du Code in Modulen und in Paketen verwalten kannst.
Willst du an deinem ``lib`` Vorhaben festhalten, musst du ``lib`` zu einem Paket machen und kannst dann ueber ``import lib.MyModule`` auf lib/MyModule.py zugreifen an ``MeineKlasse`` kommst du ueber ``lib.MyModule.MeineKlasse``

Versuche nicht eine andere Sprache in Python-Syntax zu packen, das funktioniert nicht. Jedenfalls nicht lesbar und schon gar nicht einfach.
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

require 'lib/MeineKlasse.rb'
include MeineKlasse
Du könntest sowas einfach mit:

Code: Alles auswählen

execfile("lib/MeineKlasse.py")
nachbilden. Allerdings versteh ich nicht was gegen import MeineKlasse spricht...? Das ist auf jeden Fall die Vorzugsvariante.
Antworten