Django 没有名为 elasticsearch_dsl.connections 的模块

Django no module named elasticsearch_dsl.connections

我正在尝试将我的 Django 模型连接到本地主机上的 Elasticsearch 服务器,但是当我尝试时

from elasticsearch_dsl.connections import connections

我收到错误 "ImportError: No module named elasticsearch_dsl.connections"。 当我在 Django shell 中使用相同的命令时,它工作正常。

search.py

from elasticsearch_dsl.connections import connections
from elasticsearch_dsl import DocType, Text, Date, Boolean, Integer, Keyword, fields
from elasticsearch.helpers import bulk
from elasticsearch import Elasticsearch

from .models import HomeGym, Country, Rating

connections.create_connection()

class HomeGymIndex(DocType):
    title = Text()
    price = fields.FloatField()
    tags = Keyword()

    city = Text()
    country = Text()

    rate = Integer()
    opusApproved = Boolean()

def bulk_indexing():
    HomeGymIndex.init()
    es = Elasticsearch()
    bulk(client=es, actions=(b.indexing() for b in HomeGym.objects.all().iterator()))

这会导致第 1 行出现 ImportError。"No module named elasticsearch_dsl.connections" 不过,相同的导入语句在 shell 中有效。

我已经在我的 virtualenv 中完成了 elasticsearch 和 elasticsearch-dsl 的 pip 安装。

这是文件结构

my_website/
    elasticsearch/
        #elasticsearch files pulled from github
        elasticsearch-5.5.2-SNAPSHOT/
            #elasticsearch files
            bin/
                elasticsearch
    opus/
        manage.py
        homegymlistings/
            models.py
            search.py
            #other standard app files
        opus/
            #standard files for main django branch
    my_virtualenv/
        bin/
            activate

为什么我的导入语句仅在位于 homegymlistings 应用程序内的 search.py 文件中调用时才会失败?

运行这个

pip install elasticsearch_dsl

显然我必须在 virtualenv 外部 pip install elasticsearch 和 elasticsearch-dsl。之后错误消失了。