2016-09-12 2 views
1

Я использую Docker контейнер с Ubuntu 16.04 дружественных с Python 3.5.2 виртуальной средой. Каждый раз, когда я пытаюсь инициализировать сервер uWSGI я получаю следующее сообщение об ошибке Python:ImportError при импорте elasticsearch.helpers в Python

File "/env/lib/python3.5/site-packages/elasticsearch_dsl/__init__.py", line 5, in <module> 
    from .search import Search 
    File "/env/lib/python3.5/site-packages/elasticsearch_dsl/search.py", line 3, in <module> 
    from elasticsearch.helpers import scan 
ImportError: No module named 'elasticsearch.helpers' 

Я бежал Баш вручную внутри контейнера Docker, чтобы увидеть, что случилось с модулем. Выполнив pip list в виртуальной среде, я могу сказать, что пакеты установлены правильно:

# pip list 
elasticsearch (2.1.0) 
elasticsearch-dsl (0.0.8) 

Запуск sys.path показывает, что папка пакетов сайт был правильно добавлен к пути питона:

import sys 
sys.path 
[ 
    '', 
    '/env/lib/python35.zip', 
    '/env/lib/python3.5', 
    '/env/lib/python3.5/plat-x86_64-linux-gnu', 
    '/env/lib/python3.5/lib-dynload', 
    '/usr/lib/python3.5', 
    '/usr/lib/python3.5/plat-x86_64-linux-gnu', 
    '/env/lib/python3.5/site-packages' 
] 

Существует файл __init__.py в папке elasticsearch.helpers, так что это не проблема. Если я пытаюсь импортировать из консоли Python она не будет выполнена, а также:

from elasticsearch.helpers import scan 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named 'elasticsearch.helpers' 

Но теперь, если я иду в папке пакетов участка cd /env/lib/python3.5/site-packages и запустить питон консоль отсюда, импорт будет работать.

Я действительно не знаю, почему это происходит, любая помощь будет оценена по достоинству.

ответ

2

ouch ... только новобранец ошибка. Одна из папок моего проекта называлась elasticsearch, и это вызывало проблему.

Выполняя следующую команду, я узнал, что мое приложение просто загружает модуль elasticsearch из другого места.

import elasticsearch 
pprint.pprint(os.path.abspath(elasticsearch.__file__)) 
# /var/sites/my_app/elasticsearch/__init__.py 
Смежные вопросы