relative Pfadangaben

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.
Bamba
User
Beiträge: 62
Registriert: Dienstag 31. Oktober 2006, 08:48

Dienstag 13. Februar 2007, 14:00

Hallo,

hier der Code:

Code: Alles auswählen

if sys.platform[0:3] == 'win':
  sys.path.append('../lib/')
elif sys.platform[0:5] == 'linux':
  sys.path.append(os.getcwd()+'/../lib/')
Für Linux funktioniert das schonmal, aber unter Windows, klappt es nicht. Wo befindet sich der Fehler, wenn ich dadrunter schreibe

Code: Alles auswählen

from Kampf import *
?

Ich vermute, dass die Pfadangabe einfach nicht stimmt. Wenn ja, wie lautet sie richtig?

Danke.
Bamba
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 13. Februar 2007, 14:12

Warum nutzt du nicht os.name ? Siehe http://docs.python.org/lib/module-os.html#l2h-2569

In welches Verzeichniss willst du denn rein?

bzw. ich würde os.path.join() nutzten...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Bamba
User
Beiträge: 62
Registriert: Dienstag 31. Oktober 2006, 08:48

Dienstag 13. Februar 2007, 14:17

In dem Ordner midkasim liegen wx gui und lib. Die Datei App.py liegt in wx gui. Ich will aber auch module aus lib importieren.
Bamba
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Dienstag 13. Februar 2007, 14:31

wie wäre es dann mit

Code: Alles auswählen

from lib.dein_modul import x
?

Gruß,
Christian
Bamba
User
Beiträge: 62
Registriert: Dienstag 31. Oktober 2006, 08:48

Dienstag 13. Februar 2007, 14:36

Also:

wx_gui und lib sind unterschiedliche Ordner. wenn ein Script aus wx_gui auf ein Modul im Ordner lib zurückgreifen will, dann muss ich das ja mit .../lib/mein modul machen

Das funktioniert aber nicht!

from lib.dein_modul import geht nicht.

Bamba
Bamba
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Dienstag 13. Februar 2007, 14:44

Also:
1. Hast Du das im Post vorher nicht geschrieben (da gab es drei Ordner: wx, gui und lib und jetzt gibt es wx_gui und lib) und Du hast nicht geschrieben, daß Du von der GUI aus Module aus lib importieren willst.
2. Ist klar, daß es nicht funktioniert.
3. Würde ich an Deiner Stelle das Design ändern. (Die Hauptapp in den Hauptordner und alles Weitere darunter und keine kreuzimporte.)
4. Jens Tipps werden helfen.

Gruß,
Christian
Bamba
User
Beiträge: 62
Registriert: Dienstag 31. Oktober 2006, 08:48

Dienstag 13. Februar 2007, 14:47

Vielen Dank - jetzt ist auch MIR ein Licht aufgegangen :!:

Danke
Bamba
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 13. Februar 2007, 15:18

Bamba hat geschrieben:Vielen Dank - jetzt ist auch MIR ein Licht aufgegangen :!:
Und jetzt, zusätzlich zu CMs Tipps auch die *-Importe loswerden.

Übrigens, man muss durch PEP 328 solche Pfade nicht mehr in sys.path einfügen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Dienstag 13. Februar 2007, 18:29

Leonidas hat geschrieben:[...]
Übrigens, man muss durch PEP 328 solche Pfade nicht mehr in sys.path einfügen.
Danke für den guten Tipp. Das kannte ich noch garnicht. :)

lg
Bamba
User
Beiträge: 62
Registriert: Dienstag 31. Oktober 2006, 08:48

Mittwoch 14. März 2007, 17:06

Ja, ich weiß, dass hier schon wahrscheinlich bessere Vorschläge gemacht wurden, aber ich will halt:

Code: Alles auswählen

if sys.platform[0:3] == 'win':
   sys.path.append('/../lib/')
elif sys.platform[0:5] == 'linux':
   sys.path.append(os.getcwd()+'/../lib/')
nutzen. Ich kriege es aber immer noch nicht hin. Mal unabhängig von der Sache, dass es bessere Möglichkeiten gibt, wie komme ich an ein anderes Modul ran, dass hier liegt:

Im Ordner MidKaSim liegen die Ordner lib und wx_gui. Der Code oben ist aus einer DAtei in wx_gui. Wie komme ich von da an ein Modul in lib ran? Es funktioniert einfach nicht. Bitte helft mir!

bamba
Bamba
BlackJack

Mittwoch 14. März 2007, 18:07

Ändere Deine Paketstruktur. Und/oder benutze absolute Imports.
Bamba
User
Beiträge: 62
Registriert: Dienstag 31. Oktober 2006, 08:48

Mittwoch 14. März 2007, 19:57

Unabhängig davon, dass ich es machen sollte - WARUM FUNKTIONIERT DER CODE OBEN NICHT? Es geht mir jetzt darum das einfach zu kapieren.

Danke.

Bamba
Bamba
BlackJack

Mittwoch 14. März 2007, 20:13

Weil unter 'C:\lib' nichts entsprechendes liegt? Ich gehe jetzt mal davon aus, das man bei Windows wieder in 'C:\' landet, wenn man versucht im Wurzelverzeichnis des Laufwerks eins höher zu gehen.

Ansonsten könntest Du es doch einfach mal mit ein paar ``print``-Anweisungen versuchen.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 14. März 2007, 20:46

Bamba hat geschrieben:Unabhängig davon, dass ich es machen sollte - WARUM FUNKTIONIERT DER CODE OBEN NICHT?
Hallo Bamba!

Vielleicht musst du einfach nur den absoluten Pfad angeben:

Code: Alles auswählen

import os
import sys

APPDIR = os.path.dirname(os.path.abspath(__file__))
LIBDIR = os.path.abspath(os.path.join(APPDIR, "..\\lib"))

sys.path.append(LIBDIR)
mfg
Gerold
:-)

PS: Achtung! __file__ gibt im IDLE nicht den Dateipfad zurück.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Donnerstag 15. März 2007, 06:48

sape hat geschrieben:
Leonidas hat geschrieben:[...]
Übrigens, man muss durch PEP 328 solche Pfade nicht mehr in sys.path einfügen.
Danke für den guten Tipp. Das kannte ich noch garnicht. :)

lg
Habs getestet und es funktioniert nicht wirklich bei mir :K

Beispiel Struktur:
MyProject
-- logic
---- diverse Python Scripte
-- gui
---- diverse Python Scripte
--unittests
MyWxApp.pyw

Wenn ich MyWxApp.pyw starte, und z.B. ein Script aus dem Package ``gui`` ein Script von dem Package ``logic`` importiert (import logic.foo), geht alles wunderbar, da in ``sys.path`` der Pfad zu ``MyProject`` existiert und somit darüber auf ``gui`` und ``logic`` zurückgegriffen werden kann. Aber, wenn ich nun das betreffende Script in ``gui`` starte (das ja eins aus ``logic`` importiert) dann geht es nicht, da ja der Pfad zu ``MyProject`` nicht in ``sys.path`` existiert. -- Logisch es wurde ja auch aus ``gui`` gestartet und kann daher das Package ``logic`` nicht finden, da der Pfad zum Root-Verzeichnis ``MyProject`` nicht in ``sys.path`` existiert.

Nun habe ich mal einiges aus ``PEP 328`` ausprobiert und nichts hat funktioniert. Naja, ich behelfe mir damit das ich nun weiterhin ``sys.path.append(...)`` benutze um den Pfad zum Root-Verzeichnis ``MyProject`` verfügbar zu machen. -- Das benutze ich natürlich nur bei ``unittest`` weil ich die Scripte aus diesem Packlge immer direkt ausführe!
Antworten