2017-06-05 4 views
0

Ich möchte mein Python-Skript von einer Shell ausführen.Importfehler: Aufruf von Python-Skript von Shell

#! /usr/bin/python 

import subprocess 
import time 

from path.to.my.function1 import function1 
from path.to.my.function2 import function2 

    #some code here 

if __name__ == "__main__": 

Aus meinem Shell-Befehl, ich will es so laufen:

./myPythonScript.py 

Das Ergebnis ist:

ImportError: No module named path.to.my.function1 

Wenn ich es von Eclipse-zum Beispiel laufen, I don‘ t habe irgendwelche Fehler. Ich habe einige leere _ init _.py Dateien in meinen Verzeichnissen.

Ich will nicht

sys.path.append(0, /path/to/my/function1) 

hinzuzufügen, weil es leicht exportierbar sein muss. Außerdem möchte ich meinen Dateipfad nicht zum Quellordner von PYTHONPATH hinzufügen. Es muss Plug-and-Play sein.

Ich weiß nicht, ob ich einen anderen Compiler habe oder ich meine # ändern sollte!/usr/bin/python. Oder könnte es mein PYTHONPATH sein?

Antwort

0

Sie können Ihren Code zu einem Python-Paket machen, und dann können Sie das tun. Fügen Sie einfach das Skript __init__.py dem Verzeichnis hinzu und fügen Sie Ihrem Verzeichnis ein __main__.py Skript hinzu. In den __main__.py fügen Sie den Code, den Sie nach if __name__ == '__main__' tun. Für den Import die folgende Zeile: from .path.to.my.script import foo

Schließlich laufen python -m < Verzeichnisname>. Außerhalb Ihres Paketverzeichnisses.

+0

Soll ich noch # setzen! usr/bin/python? Ich werde Pakete anschauen! –

+0

Nicht notwendig. Sie deklarieren mit Python, wenn Sie Befehl: Python -m < package > – Sawel

+0

Ich habe immer noch den gleichen Fehler, wenn ich ein _main_.py (die Pakete) verwendet. Danke für Ihre Hilfe –

0

Verwendung PYTHONPATH =/path/to/Paket/root, wo das Paketstamm das Verzeichnis über path ist

+0

Nein, die Sache ist, dass ich nicht den ganzen Pfad verwenden möchte. Wenn wir den Speicherort des Repos ändern (zum Beispiel), möchte ich nicht den ganzen Pfad in jeder Datei durchsuchen –

Verwandte Themen