Docker NLTK下载

GNM*_*O11 24 python nltk docker

我正在使用以下Dockerfile构建一个docker容器:

FROM ubuntu:14.04

RUN apt-get update

RUN apt-get install -y python python-dev python-pip

ADD . /app

RUN apt-get install -y python-scipy

RUN pip install -r /arrc/requirements.txt

EXPOSE 5000

WORKDIR /app

CMD python app.py
Run Code Online (Sandbox Code Playgroud)

一切顺利,直到我运行图像并得到以下错误:

**********************************************************************
  Resource u'tokenizers/punkt/english.pickle' not found.  Please
  use the NLTK Downloader to obtain the resource:  >>>
  nltk.download()
  Searched in:
    - '/root/nltk_data'
    - '/usr/share/nltk_data'
    - '/usr/local/share/nltk_data'
    - '/usr/lib/nltk_data'
    - '/usr/local/lib/nltk_data'
    - u''
**********************************************************************
Run Code Online (Sandbox Code Playgroud)

我以前遇到过这个问题,这里讨论但是我不知道如何使用Docker来解决它.我试过了:

CMD python
CMD import nltk
CMD nltk.download()
Run Code Online (Sandbox Code Playgroud)

以及:

CMD python -m nltk.downloader -d /usr/share/nltk_data popular
Run Code Online (Sandbox Code Playgroud)

但我仍然得到错误.

cch*_*chi 31

在Dockerfile中,尝试添加:

RUN python -m nltk.downloader punkt

这将运行命令并将所请求的文件安装到 //nltk_data/

问题很可能与在Dockerfile中使用CMD与RUN有关.CMD文档:

CMD的主要目的是为执行容器提供默认值.

docker run <image>在构建期间使用,而不是在构建期间使用 所以其他CMD线可能被最后CMD python app.py一行覆盖.

  • 我正在使用这种方法,但我收到此错误:/usr/local/lib/python3.6/runpy.py:125: RuntimeWarning: 'nltk.downloader' 在导入包“nltk”后在 sys.modules 中找到,但是在执行“nltk.downloader”之前;这可能会导致不可预测的行为 (3认同)
  • 我在构建 docker 容器时也收到了警告,所以我改为使用 RUN python -c "import nltk; nltk.download('punkt')"` ,它在没有警告的情况下构建 (2认同)

小智 7

好吧,我尝试了所有建议的方法,但没有任何效果,所以我意识到 nltk 模块在 /root/nltk_data 中搜索

第 1 步:我使用以下命令在我的机器上下载了 punkt

python3
>>import nltk
>>nltk.download('punkt')
Run Code Online (Sandbox Code Playgroud)

punkt 在 /root/nltk_data/tokenizer

第 2 步:我将 tokenizer 文件夹复制到我的导演,我的目录看起来像这样

.
|-app/
|-tokenizers/
|--punkt/
|---all those pkl files
|--punkt.zip
Run Code Online (Sandbox Code Playgroud)

和第 3 步:然后我修改了 Dockerfile,将其复制到我的 docker 实例

COPY ./tokenizers /root/nltk_data/tokenizers
Run Code Online (Sandbox Code Playgroud)

第 4 步:新实例有 punkt


E G*_*E G 5

我通过指示容器内的下载目的地来使其适用于谷歌云构建。

RUN [ "python3", "-c", "import nltk; nltk.download('punkt', download_dir='/usr/local/nltk_data')" ]

完整的 Dockerfile

FROM python:3.8.3

WORKDIR /app

ADD . /app

# install requirements
RUN pip3 install --upgrade pip
RUN pip3 install --no-cache-dir --compile -r requirements.txt

RUN [ "python3", "-c", "import nltk; nltk.download('punkt', download_dir='/usr/local/nltk_data')" ]

CMD exec uvicorn --host 0.0.0.0 --port $PORT main:app
Run Code Online (Sandbox Code Playgroud)