Seite 1 von 1

Verhalten von Symlinks

Verfasst: Dienstag 14. Januar 2025, 14:08
von pythoneer2025
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?

Re: Verhalten von Symlinks

Verfasst: Dienstag 14. Januar 2025, 15:37
von __blackjack__
@pythoneer2025: Ist das bei Python denn anders? Das was Du beschreibst ist ja verhalten der IDE und nicht verhalten von Python.

Re: Verhalten von Symlinks

Verfasst: Dienstag 14. Januar 2025, 16:00
von DeaD_EyE
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.

Re: Verhalten von Symlinks

Verfasst: Dienstag 14. Januar 2025, 17:43
von pythoneer2025
__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.