module an anderem Ort (Python3)

  • Hallo,

    ich möchte den Module in /home/pi/mymod/SuperModule.py aus
    /home/pi/plant/test.py laden.
    mit

    Code
    gMod = importlib.machinery.SourceFileLoader('gMod','/home/pi/mymod/SuperModule.py').load_module()


    bekomme ich die Meldung das die Eigenschaft SourceFileLoader nicht existiert.
    (http://stackoverflow.com/questions/2738…n-the-full-path)

    Auch habe ich keine Ahnung was links vom "=" stehen muss und mit dem ersten Parameter habe ich auch Verständnisprobleme.

    Mit
    from ..SuperModule import *
    geht das auch nicht.
    (from http://stackoverflow.com/questions/1217…atement-python3)

    Kann mir jemand die Hand führen?

    Gottfried

    PS.: warum: das Module soll von mehreren Projekten die in eigenen Directories sind angesprochen werden.

  • Das ist nicht die exakte Version. Und die ist wichtig. Bitte Python starten & lesen, was da steht. Zb Python 2.7.6, bei meinem Mac-System-2.7.

  • Du kannst auch einfach vor dem "import aaa" ein

    Code
    import sys
    sys.path.append("/pfad/zum/dy")
    import aaa

    machen. Das ist natuerlich eher schlechter Stil, weil man dadurch einen festen Ort fuer aaa.py festlegt, aber funktionieren tut es.

  • Da fehlt eine abschließende )

    Also normalerweise brauch man nicht unbedingt die Python Umgebungsvariablen ( PYTHONPATH -> sys.path ) anpassen - also die Verzeichnisse in denen vom python Interpreter nach Scripts gesucht wird (module sind auch scripts).

    Normalerweise sucht der Python Interpreter im aktuellen Verzeichnis oder in den PYTHONPATH bzw sys.path Verzeichnissen - es sei denn man möchte aus einem Unterordner etwas importieren... Zum Beispiel befindest du dich in /home/pi/ und hast in einem Unterordner "Tools" ein Script namens "test.py" dann wäre der absolute Pfad: /home/pi/Tools/test.py
    In /home/pi/ hast du ein Script in dem du das im Unterordner befindliche importieren willst, dann kannst du einfach " from Tools.test import * " verwenden. Aber das funktioniert wie gesagt nur mit Unterordnern. Wenn sich das Script aber in einem anderen Verzeichnisbaum befindet funktioniert das nur über die von deets erwähnte Erweiterung von "sys.path"

    Allerdings würde ich das nicht über "append" machen sondern mithilfe von "insert", aus einem einfachen Grund: Performance

    Durch "append" wird das Verzeichnis ans Ende der Liste hinzugefügt. Der Interpreter durchsucht also erst einige andere Verzeichnisse nach dem Script, bevor dann erst ganz zum Schluss in unser manuell hinzugefügtes Verzeichnis gesucht wird... Das raubt also Zeit und verursacht unnötige I/O Zugriffe da Wir ja ganz genau wissen in welchem Verzeichnis sich die Datei befindet...

    Stattdessen wäre es also besser unser Verzeichnis an den Anfang der Liste einzufügen und das erreicht man durch:

    [code=php]import sys

    sys.path.insert(0, '/var/Tools')

    import test
    [/php]


    PS: Es spielt hierbei übrigens keine Rolle welche Python Version man hat.

  • Großes DANKE

Jetzt mitmachen!

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