Docker NLTK 下载
Docker NLTK Download
我正在使用以下 Docker 文件构建一个 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
一切顺利,直到我 运行 图像并出现以下错误:
**********************************************************************
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''
**********************************************************************
我以前遇到过这个问题并且讨论过 here 但是我不确定如何使用 Docker 来解决它。我试过:
CMD python
CMD import nltk
CMD nltk.download()
以及:
CMD python -m nltk.downloader -d /usr/share/nltk_data popular
但我仍然收到错误。
在您的 Dockerfile 中,尝试添加:
RUN python -m nltk.downloader punkt
这将 运行 命令并将请求的文件安装到 //nltk_data/
问题很可能与在 Dockerfile 中使用 CMD 与 运行 有关。 CMD 文档:
The main purpose of a CMD is to provide defaults for an executing container.
在 docker run <image>
期间使用,而不是在构建期间使用。所以其他 CMD 行可能被最后 CMD python app.py
行覆盖。
我在使用 ubuntu 图像和 python3 为 django 应用程序创建 docker 图像时遇到了同样的问题。
我解决如下图
# start from an official image
FROM ubuntu:16.04
RUN apt-get update \
&& apt-get install -y python3-pip python3-dev \
&& apt-get install -y libmysqlclient-dev python3-virtualenv
# arbitrary location choice: you can change the directory
RUN mkdir -p /opt/services/djangoapp/src
WORKDIR /opt/services/djangoapp/src
# copy our project code
COPY . /opt/services/djangoapp/src
# install dependency for running service
RUN pip3 install -r requirements.txt
RUN python3 -m nltk.downloader punkt
RUN python3 -m nltk.downloader wordnet
# Setup supervisord
RUN mkdir -p /var/log/supervisor
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
# Start processes
CMD ["/usr/bin/supervisord"]
好吧,我尝试了所有建议的方法,但没有任何效果,所以我意识到 nltk 模块在 /root/nltk_data
中搜索
第 1 步:我在我的机器上下载了 punkt
通过使用
python3
>>import nltk
>>nltk.download('punkt')
而这个点在 /root/nltk_data/tokenizer
第 2 步:我将 tokenizer 文件夹复制到我的 director
我的目录看起来像这样
.
|-app/
|-tokenizers/
|--punkt/
|---all those pkl files
|--punkt.zip
和
第 3 步:然后我修改了将其复制到我的 docker 实例
的 Dockerfile
COPY ./tokenizers /root/nltk_data/tokenizers
第 4 步:新实例有 punkt
目前我必须这样做:请参阅 RUN cp -r /root/nltk_data /usr/local/share/nltk_data
FROM ubuntu:latest
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get clean && apt-get update && apt-get install -y locales
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
RUN apt-get -y update && apt-get install -y --no-install-recommends \
sudo \
python3 \
build-essential \
python3-pip \
python3-setuptools \
python3-dev \
&& rm -rf /var/lib/apt/lists/*
RUN pip3 install --upgrade pip
ENV PYTHONPATH "${PYTHONPATH}:/app"
ADD requirements.txt .
# in requirements.txt: pandas, numpy, wordcloud, matplotlib, nltk, sklearn
RUN pip3 install -r requirements.txt
RUN [ "python3", "-c", "import nltk; nltk.download('stopwords')" ]
RUN [ "python3", "-c", "import nltk; nltk.download('punkt')" ]
RUN cp -r /root/nltk_data /usr/local/share/nltk_data
RUN addgroup --system app \
&& adduser --system --ingroup app app
WORKDIR /home/app
ADD inputfile .
ADD script.py .
# the script uses the python modules: pandas, numpy, wordcloud, matplotlib, nltk, sklearn
RUN chown app:app -R /home/app
USER app
RUN python3 script.py inputfile outputfile
我通过在容器中指示下载目标来为 google 云构建工作。
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
我正在使用以下 Docker 文件构建一个 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
一切顺利,直到我 运行 图像并出现以下错误:
**********************************************************************
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''
**********************************************************************
我以前遇到过这个问题并且讨论过 here 但是我不确定如何使用 Docker 来解决它。我试过:
CMD python
CMD import nltk
CMD nltk.download()
以及:
CMD python -m nltk.downloader -d /usr/share/nltk_data popular
但我仍然收到错误。
在您的 Dockerfile 中,尝试添加:
RUN python -m nltk.downloader punkt
这将 运行 命令并将请求的文件安装到 //nltk_data/
问题很可能与在 Dockerfile 中使用 CMD 与 运行 有关。 CMD 文档:
The main purpose of a CMD is to provide defaults for an executing container.
在 docker run <image>
期间使用,而不是在构建期间使用。所以其他 CMD 行可能被最后 CMD python app.py
行覆盖。
我在使用 ubuntu 图像和 python3 为 django 应用程序创建 docker 图像时遇到了同样的问题。
我解决如下图
# start from an official image
FROM ubuntu:16.04
RUN apt-get update \
&& apt-get install -y python3-pip python3-dev \
&& apt-get install -y libmysqlclient-dev python3-virtualenv
# arbitrary location choice: you can change the directory
RUN mkdir -p /opt/services/djangoapp/src
WORKDIR /opt/services/djangoapp/src
# copy our project code
COPY . /opt/services/djangoapp/src
# install dependency for running service
RUN pip3 install -r requirements.txt
RUN python3 -m nltk.downloader punkt
RUN python3 -m nltk.downloader wordnet
# Setup supervisord
RUN mkdir -p /var/log/supervisor
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
# Start processes
CMD ["/usr/bin/supervisord"]
好吧,我尝试了所有建议的方法,但没有任何效果,所以我意识到 nltk 模块在 /root/nltk_data
中搜索第 1 步:我在我的机器上下载了 punkt 通过使用
python3
>>import nltk
>>nltk.download('punkt')
而这个点在 /root/nltk_data/tokenizer
第 2 步:我将 tokenizer 文件夹复制到我的 director 我的目录看起来像这样
.
|-app/
|-tokenizers/
|--punkt/
|---all those pkl files
|--punkt.zip
和 第 3 步:然后我修改了将其复制到我的 docker 实例
的 DockerfileCOPY ./tokenizers /root/nltk_data/tokenizers
第 4 步:新实例有 punkt
目前我必须这样做:请参阅 RUN cp -r /root/nltk_data /usr/local/share/nltk_data
FROM ubuntu:latest
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get clean && apt-get update && apt-get install -y locales
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
RUN apt-get -y update && apt-get install -y --no-install-recommends \
sudo \
python3 \
build-essential \
python3-pip \
python3-setuptools \
python3-dev \
&& rm -rf /var/lib/apt/lists/*
RUN pip3 install --upgrade pip
ENV PYTHONPATH "${PYTHONPATH}:/app"
ADD requirements.txt .
# in requirements.txt: pandas, numpy, wordcloud, matplotlib, nltk, sklearn
RUN pip3 install -r requirements.txt
RUN [ "python3", "-c", "import nltk; nltk.download('stopwords')" ]
RUN [ "python3", "-c", "import nltk; nltk.download('punkt')" ]
RUN cp -r /root/nltk_data /usr/local/share/nltk_data
RUN addgroup --system app \
&& adduser --system --ingroup app app
WORKDIR /home/app
ADD inputfile .
ADD script.py .
# the script uses the python modules: pandas, numpy, wordcloud, matplotlib, nltk, sklearn
RUN chown app:app -R /home/app
USER app
RUN python3 script.py inputfile outputfile
我通过在容器中指示下载目标来为 google 云构建工作。
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