Verhalten von Symlinks

Probleme bei der Installation?
Antworten
pythoneer2025
User
Beiträge: 8
Registriert: Dienstag 14. Januar 2025, 13:34

Hallo zusammen,

ich habe ein Problem mit symbolischen Links in meinem Projektordner-Pfad.
Bisher hatte ich mein Projekte unter /home/me/Projekte liegen.
Da ich aktuell gelegentlich das System wechsle (ubuntu und Manjaro, jeweils mit KDE) habe ich das Projektverzeichnis jetzt unter /home/Projekte (der auch mir gehört) angelegt und verweise per Symlink von /home/me/Projekte auf /home/Projekte. Dadurch kann ich von beiden Systemen wie gewohnt und transparent auf die Projekte zugreifen.
Das funktioniert im Prinzip auch wie erwartet, bis auf eine Ausnahme.

Nun will ich ein Programm mit PyCharm debuggen, das z.B. in /home/Projekte/p1 liegt.
Wenn nun aus /home/Projekte/p1/main.py eine Funktion aufgerufen wird die sich z.B. in /home/Projekte/p1/foo.py liegt dann öffnet die IDE bei einem Haltepunkt nicht etwa den Symlink /home/Projekte/p1/main.py, sondern den realen Pfad /home/Projekte/p1/foo.py.
Technisch funktioniert das auch. Nur, wenn ich nun in dieser Datei etwas ändern will meint PyCharm, dass diese Datei nicht Teil des Projekts wäre, und ich muss das explizit erlauben.

Gibt es einen Weg, das zu verhindern?
Natürlich könnte ich auch einfach das Projekt in seinem "echten" Pfad öffnen, Aber das finde ich recht mühsam. Der Pfad ist nicht ganz so simpel wie hier dargestellt, sondern relativ verschachtelt. Und wenn ich nicht mit Links arbeiten kann ist das eine unangenehme Klickerei.

Im Dateimanager usw. bemerke ich ja gar nichts von "Umleitungen" durch Symlinks. Warum ist das bei Python anders?
Benutzeravatar
__blackjack__
User
Beiträge: 13999
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@pythoneer2025: Ist das bei Python denn anders? Das was Du beschreibst ist ja verhalten der IDE und nicht verhalten von Python.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Benutzeravatar
DeaD_EyE
User
Beiträge: 1221
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Ja, hat mit Python nichts zu tun.
Um Symlinks zu folgen, musst du extra eine Methode aufrufen, dann wird der Pfad aufgelöst:

Code: Alles auswählen

Path("/bin").resolve()
Verweist bei den meisten Distributionen auf /usr/bin. Das ist noch ein Relikt aus alten Zeiten und wenig Speicherplatz.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
pythoneer2025
User
Beiträge: 8
Registriert: Dienstag 14. Januar 2025, 13:34

__blackjack__ hat geschrieben: Dienstag 14. Januar 2025, 15:37 @pythoneer2025: Ist das bei Python denn anders? Das was Du beschreibst ist ja verhalten der IDE und nicht verhalten von Python.
Oh, in der Tat. Die IDE "lügt" mich an.
Ich habe mal testhalber folgende Zeilen in main.py und einer unit globals.py eingebaut, die von main aufgerufen wird:

Code: Alles auswählen

print("cwd: ", os.getcwd())
print("__file__ path: ", __file__)
Wenn ich das Programm aus der IDE starte wird folgendes ausgegeben:
aus main.py:

Code: Alles auswählen

cwd:  /home/Projekte/p1  (sic!)
__file__ path:  /home/me/Projekte/p1/main.py
und aus globals.py:

Code: Alles auswählen

cwd:  /home/Projekte/p1
__file__ path:  /home/Projekte/p1/Globals.py
Beim Aufruf aus der Komandozeile (mit aktuellem Verzeichnis /home/me/Projekte) wird in beiden Fällen das rale Verzeichnis angezeigt, nämlich:

Code: Alles auswählen

cwd:  /home/Projekte/p1  
__file__ path:  /home/Projekte/p1/main.py   (bzw. globals.py)
Das ist schon recht unerwartet, insbesondere, weil getcwd() auch in der IDE den realen Pfad ausgibt und nicht den verlinkten. Der Spaß hat mich leider zwei Stunden an Rätselraten gekostet :-(

Vielen Dank für deine Hilfe.
Antworten