Seite 1 von 1

Python-Scripts aus einem Unterordner in Script einbinden

Verfasst: Dienstag 11. August 2009, 15:03
von Cow
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?

Verfasst: Dienstag 11. August 2009, 15:09
von Leonidas
Les mal zum Thema "Packages" in der Dokumentation.

Verfasst: Dienstag 11. August 2009, 15:09
von Defnull
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 *"

Verfasst: Dienstag 11. August 2009, 15:14
von cofi
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

Verfasst: Dienstag 11. August 2009, 16:09
von Cow
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.

Verfasst: Dienstag 11. August 2009, 16:17
von cofi
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.

Verfasst: Dienstag 11. August 2009, 20:43
von HerrHagen
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.