导入elasticsearch时导入importterror.Python中的helper



我使用docker容器与Ubuntu 16.04 XenialPython 3.5.2虚拟环境。每次我试图初始化服务器uWSGI时,我都会得到以下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容器内手动运行bash,看看模块出了什么问题。通过在虚拟环境中运行pip list,我可以知道这些包已经正确安装:

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

运行系统。path显示site packages文件夹已正确添加到python路径:

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'
]

文件夹elasticsearch中有一个__init__.py文件。helpers所以这不是问题。如果我尝试从Python控制台导入,它也会失败:

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

但是现在如果我进入site-packages文件夹cd /env/lib/python3.5/site-packages并从这里运行python console,导入将工作。

我真的不知道为什么会发生这种情况,如果有任何帮助,我将不胜感激。

哎呀…只是新手犯的错误。我的项目中有一个文件夹叫做elasticsearch,这就是导致这个问题的原因。

运行以下命令,我发现我的应用程序只是从不同的位置加载elasticsearch模块。

import elasticsearch
import pprint, os

pprint.pprint(os.path.abspath(elasticsearch.__file__))
# /var/sites/my_app/elasticsearch/__init__.py

最新更新