2016-09-08 4 views
0

Ich weiß, es gibt eine Tonne von Fragen zu diesem Thema gewesen, aber ich ist ziemlich spezifisch und ich weiß nicht wirklich, warum der Import nicht funktioniert. Ich habe die folgende Ordnerstruktur bekommt:Python Import Error - spezifischer Fall

importmodule 
-classes 
-pluginhelper 
-- __init__.py 

-plugins 
-- plugin_a 
-- plugin b 
-- .. 

-__init__.py 
-<other py files> 

In meinen Plugin-Dateien i die pluginhelper wie dies am Import:

from importmodule.pluginhelper import function1, function2, ... 

Die Funktionen in dem definierten __ init

__.py

Das Ausführen meiner Plugin-Dateien funktioniert auf meinem Windows-Rechner. Wenn ich es auf dem Server zu tun, erhalte ich Ausnahme folgenden:

ImportError: No module named 'importmodule' 

Das Merkwürdige ist, dass ich von jeder Plugin den Fehler machen, aber ein. In einem der Plugins funktioniert der Import, während es bei den Importanweisungen keine Unterschiede gibt.

Ich verwende Python 3.5 auf beiden Maschinen, während auf dem Server meiner Anwendung innerhalb eines Docker Behälter ist.

Edit: Einstellen der sys.path hat nicht funktioniert entweder:

print("Indexed Path for Package.") 
    sys.path.index(os.getcwd()) 

fand ich das mögliche Problem: Die Ordnerstruktur in meinem dockercontainer anders zu sein scheint. Ich werde es reparieren und Ihnen sagen, ob es geholfen hat. Noch verstehe ich nicht, warum es mit dem gleichen Plugin funktioniert, das dieselbe Anweisung verwendet.

+0

Haben Sie versucht 'von pluginhelper import function1, function2, ...'? –

+0

PyCharm ist mir diese eine sofort hervorgehoben, da es importmodule.plugins.plugina.plugina.pluginhelper zu suchen in scheint – PhilipB

+0

ich sehe, dann versuchen Sie das Hinzufügen '__init __. Py' in Ihrem' plugins' Ordner Python sie als machen behandeln Modul. –

Antwort

0

Ich möchte, dass meine Lösung mit Ihnen teilen, da jemand die Frage zu lesen scheint ähnliche Probleme zu haben.

Das Problem ist aufgetreten, weil das Paket in PYTHONPATH/syspath enthalten werent. Ich rufe die Plugins in einem neuen Thread mit einem Skript namens execute.py auf. Dies wird über cmd von main.py aufgerufen, weil ich meine Klassen nicht multiprocessing kann. Und da sich die Plugins in ../plugins befinden, enthält Python nur diesen Pfad. Nicht der Pfad/Importmodul. Irgendwie scheint es, dass es in Windows enthalten ist, weiß ich nicht wirklich, was dort passiert ist tbh.

Was ich tat war, ich habe die sys.path.append Zeug auf meinem execute.py, die die Plugins wie folgt ausführt: from pluginhelper import scrapeHostnames, hostnamesToIps, getSource. Meine IDE markiert die Importanweisung jetzt rot, aber es funktioniert, da ich das Paket angehängt habe.