2016-09-08 3 views
0

Я знаю, что было много вопросов об этом, но мой довольно специфичен, и я действительно не знаю, почему импорт не работает. я получил следующую структуру папок:Python Import Error - конкретный случай

importmodule 
-classes 
-pluginhelper 
-- __init__.py 

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

-__init__.py 
-<other py files> 

В моих плагинов файлов я импортировать pluginhelper как это:

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

функции определены в __ инициализации __.py

Выполнение моих файлов плагинов отлично работает на моем компьютере с Windows. Когда я делаю это на сервере, я получаю следующее исключение:

ImportError: No module named 'importmodule' 

Любопытным является, что я получаю ошибку от каждого плагина, но один. В одном из плагинов импорт работает, в то время как в операторах импорта нет различий.

Я использую python 3.5 на обеих машинах, а на сервере мое приложение находится в контейнере докера.

Edit: Установка не работало sys.path либо:

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

Я нашел возможную проблему: Структура папок в моем dockercontainer, кажется, по-другому. Я исправлю это и скажу, помогло ли это. По-прежнему я не понимаю, почему он работает с одним плагином, используя тот же оператор.

+0

Вы пробовали 'from pluginhelper import function1, function2, ...'? –

+0

PyCharm выделяет мне это мгновенно, поскольку он, кажется, ищет в importmodule.plugins.plugina.plugina.pluginhelper – PhilipB

+0

Я вижу, а затем попробуйте добавить '__init __. Py' в папку' plugins', чтобы Python рассматривал это как модуль. –

ответ

0

Я хочу поделиться своим решением с вами, так как любой, кто читает вопрос, похоже, имеет схожие проблемы.

Проблема возникла из-за того, что пакет не включен в pythonpath/syspath. Я вызываю плагины в новом потоке со сценарием execute.py. Это вызвано через cmd из main.py, потому что я не могу многопроцессить мои классы. А поскольку плагины расположены в ../plugins, python включает только этот путь. Не путь/importmodule. Каким-то образом кажется, что он был включен в windows, я действительно не знаю, что произошло там tbh.

Что я сделал, я включил в свой файл execute.py файл sys.path.append, который выполняет следующие плагины: from pluginhelper import scrapeHostnames, hostnamesToIps, getSource. Теперь моя IDE отмечает, что оператор импорта красный, но он работает, так как я добавляю пакет.

Смежные вопросы