python - 在Python中导入elasticsearch.helpers时出现ImportError

标签 python docker elasticsearch-py

我正在使用带有 Ubuntu 16.04 XenialPython 3.5.2 虚拟环境的 docker 容器。每次我尝试初始化服务器 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)

运行sys.path显示站点包文件夹已正确添加到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.helpers 中有一个 __init__.py 文件,所以这不是问题。如果我尝试从 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 控制台,则导入将起作用。

我真的不知道为什么会发生这种情况,我们将不胜感激。

最佳答案

哎呀...只是一个菜鸟错误。我的项目的文件夹之一称为elasticsearch,这就是导致问题的原因。

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

import elasticsearch
import pprint, os


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

关于python - 在Python中导入elasticsearch.helpers时出现ImportError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39446705/

相关文章:

django - 如何使用 django-elasticsearch-dsl 将 django-modeltranslation 创建的列索引到 Elastic?

regex - 使用 Python 每 64 个字符插入一个换行符

python - defaultdict的嵌套defaultdict

python - 如何使用 Python 将变量中的列值插入到 Postgres 中?

Docker compose Volume - 上传的文件

bash - 使用docker exec执行主机上存在的Shell脚本时出现问题

multithreading - 具有多线程的ElasticSearch Scroll API

python - 如何有效地对 numpy 数组的每个第 N 个元素进行加法或乘法?

ubuntu - 在 Ubuntu 中创建一个可以 sudo 的用户(Dockerfile)

python - Elasticsearch-Python-具有刷新功能的批量助手API