Programmzugriff auf Paket in übergeordneten Ordner

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Experten, ich habe ein Verständnisproblem:

    Ich benutze das Programm "detect_faces.py," im Ordner "examples", das auf ein Modul (vision,py)

    im Paket "aiymakerkit" im übergeordneten Ordner "aiy-maker-kit" zugreift


    Wenn ich den Code in vision.py (mit Thonny) editiere und abspeichere greift detect.faces.py nicht

    auf das geänderte vision.py zu. (Löschen des Ordners __pycache__ ändert nichts).

    Erst wenn ich das Paket aiymakerkit in den gleichen Ordner, wie das ausführende Programm

    (detect_faces.py) verschiebe funktioniert's.

    Was passiert hier? Gibt es eine Lösung ohne das Paket zu verschieben??

    Vielen Dank für Eure Hilfe

  • Programmzugriff auf Paket in übergeordneten Ordner? Schau mal ob du hier fündig wirst!

  • Das Modul vision.py ist nicht im Suchpfad von Python drin. Dazu gibt es eine Environment Variable namens PYTHONPATH, zu der man das Projektverzeichnis hinzufügen kann.

    Bash
    cd /home/pi/aiy-maker-kit/examples
    PYTHONPATH="$PYTHONPATH:/home/pi/aiy-maker-kit" python3 detect_faces.py

    Ob das auch mit Thonny geht, weiß ich nicht, ich habe nie damit gearbeitet.

    Edit: Damit man die Environment Variable nicht immer dazu schreiben muss, sollte man auch diese Commands benutzen können:

    Bash
    cd /home/pi/aiy-maker-kit/examples
    export PYTHONPATH="$PYTHONPATH:/home/pi/aiy-maker-kit"
    python3 detect_faces.py

    Einmal editiert, zuletzt von bennetr (24. April 2023 um 17:17)

  • Ich denke mal, die sind genau so installiert, nur ohne den -e-Flag.

    Wenn man ein lokales Projekt mit pip installiert, werden die Dateien in den Ordner /usr/local/lib/python3.11/site-packages kopiert.

    (Es sei denn, man benutzt eine virtual-env oder installiert mit --user, dann ändert sich der Ordner)

    Wenn man den -e-Flag hinzufügt, wird statt dem kopieren einfach der Projektpfad zum Python-Suchpfad hinzugefügt. Also genau das, was ich auch in der ersten Antwort erklärt habe.

    In __pycache__ ist der Bytecode, der aus den .py-Dateien kompiliert wurde. Der Ordner ist einfach dazu da, dass Python das Programm schneller starten kann, weil die Dateien schon kompiliert sind.

    https://pip.pypa.io/en/stable/topics/local-project-installs/

    __blackjack__ Leider wird markdown nicht unterstützt ;(

  • Im Verzeichnis site-packages wird dann die Datei paketname.egg-link angelegt und der Inhalt ist der absolute Pfad zum Paket.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!