【问题标题】:nltk download not working inside docker for a django servicenltk 下载在 docker 内无法用于 django 服务
【发布时间】:2019-03-03 07:08:47
【问题描述】:

我正在尝试使用使用 nltk 库的 docker 启动 django 服务。 在 dockerfile 中,我调用了一个 setup.py,它调用了 nltk.download。根据我在构建 docker 映像期间看到的日志,此步骤运行成功。

但是当我运行 docker 镜像并尝试连接到我的 django 服务时,我收到错误消息说 nltk.download 还没有发生。

Dockerfile 代码 -

RUN . ${PYTHON_VIRTUAL_ENV_FOLDER}/bin/activate && python ${PYTHON_APP_FOLDER}/setup.py

setup.py 代码 -

import nltk
import os

nltk.download('stopwords', download_dir=os.getcwd() + '/nltk_data/')
nltk.download('wordnet', download_dir=os.getcwd() + '/nltk_data/')

错误:

**********************************************************************
  Resource stopwords not found.
  Please use the NLTK Downloader to obtain the resource:

  >>> import nltk
  >>> nltk.download('stopwords')

  Searched in:
    - '/root/nltk_data'
    - '/usr/share/nltk_data'
    - '/usr/local/share/nltk_data'
    - '/usr/lib/nltk_data'
    - '/usr/local/lib/nltk_data'
    - '/usr/src/venv/nltk_data'
    - '/usr/src/venv/share/nltk_data'
    - '/usr/src/venv/lib/nltk_data'
**********************************************************************

知道这里有什么问题吗? 此外,当我在没有 docker 的情况下运行它时,相同的代码也可以工作。

【问题讨论】:

  • 在什么方面不起作用?您能否将实际的错误消息、Dockerfile 以及您的 docker run 命令或 docker-compose.yml 添加到问题中?
  • docker run -it -e ENVIRONMENT_NAME=local -e REGION_NAME=local -p 9081:8080 docker_image - 运行命令
  • @DavidMaze - 我已经在问题中添加了来自 Dockerfile 的相关行。此外,添加了错误消息和 docker-run 命令。
  • 安装nltk_datadocker build -f Dockerfile -v $HOME/nltk_data/:/nltk_data/。然后在setup.py 之前,在Dockerfile 中,ENV NLTK_DATA=/nltk_data/

标签: django python-3.x docker nltk


【解决方案1】:

之前遇到过同样的问题并且做了几乎你做过的同样的事情,我假设你在这里缺少的是通过添加到路径来配置nltk.data.path@ 987654323@是。

【讨论】:

  • 这很有效,谢谢!但稍作调整。我必须在 Dockerfile 中指定这个环境变量,然后还要使用 add 语句。 ENV NLTK_DATA /app/nltk_data/ADD . $NLTK_DATA
【解决方案2】:

感谢您的帖子,它也解决了我的问题!!!!

我遇到了与 punkt 在 docker 中退出相同的问题:

/root/nltk_data/tokenizers/punkt

但是当我的应用尝试访问它时,Docker 一直抱怨找不到资源。

受您帖子的启发,我补充说:

ENV NLTK_DATA /root/nltk_data/
ADD . $NLTK_DATA

但仍然收到相同的错误消息。所以我尝试了这个:

ENV NLTK_DATA /nltk_data/
ADD . $NLTK_DATA

我不知道为什么要从路径中删除 /root,但它成功了!

我的应用程序正在使用 Flask 和 uWSGI,所以我想这可能是 Django 和 Flask 的问题?还是谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    相关资源
    最近更新 更多