我正在使用带有 Ubuntu 16.04 Xenial 的docker容器和 Python 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)
运行 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 console,导入将起作用。
我真的不知道为什么会这样,任何帮助都会受到赞赏。
答案 0 :(得分:3)
哎哟......只是一个菜鸟的错误。我项目的其中一个文件夹叫做elasticsearch,导致了这个问题。
运行以下命令我发现我的应用只是从其他位置加载elasticsearch模块。
import elasticsearch
import pprint, os
pprint.pprint(os.path.abspath(elasticsearch.__file__))
# /var/sites/my_app/elasticsearch/__init__.py