Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Docker NLTK下载_Python_Docker_Nltk - Fatal编程技术网

Python Docker NLTK下载

Python Docker NLTK下载,python,docker,nltk,Python,Docker,Nltk,我正在使用以下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 a

我正在使用以下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''
**********************************************************************
我以前遇到过这个问题,并且已经讨论过了,但是我不确定如何使用Docker解决这个问题。我试过:

CMD python
CMD import nltk
CMD nltk.download()
以及:

CMD python -m nltk.downloader -d /usr/share/nltk_data popular

但我仍然收到错误。

在Dockerfile中,尝试添加以下内容:

运行python-m nltk.downloader punkt

这将运行命令并将请求的文件安装到
//nltk\u data/

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

CMD的主要用途是为正在执行的容器提供默认值


在docker运行期间使用,而不是在构建期间使用。因此,其他CMD行可能被上一个
CMD python app.py
行覆盖了。

当我使用ubuntu image和python3 for 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_数据中搜索

步骤1:我在我的机器上下载了punkt 利用

punkt位于/root/nltk_data/tokenizer中

步骤2:我将tokenizer文件夹复制到我的主管 我的目录是这样的

.
|-app/
|-tokenizers/
|--punkt/
|---all those pkl files
|--punkt.zip
及 步骤3:然后我修改了Dockerfile,该文件将其复制到我的docker实例中

COPY ./tokenizers /root/nltk_data/tokenizers

步骤4:新实例有punkt

这是错误的“CMD python CMD import nltk CMD nltk.download()”这与打开一个终端相同,键入
python
,打开另一个终端,键入
import nltk
等等(当然第二个命令将失败,因为它不在Pythonmaybe
运行python-c'import nltk;nltk.download()中)“
或类似的东西(我不确定语法)你知道如果我只是复制nltk_数据文件夹,我需要复制未压缩的文件夹和zip文件还是只复制ZipFile?我正在使用这种方法,但我得到了这个错误:/usr/local/lib/python3.6/runpy.py:125:RuntimeWarning:“nltk.downloader”在导入包“nltk”之后,但在执行“nltk.downloader”之前,在sys.modules中找到了“nltk.downloader”;这可能会导致不可预测的行为。NLTK中的更多信息将与上面的命令配对。我在构建docker容器时也收到了警告,因此我使用了
RUN python-c“import NLTK;NLTK.download('punkt')”
在没有警告的情况下进行构建这应该得到更多的支持。这是解决问题的最简单的解决方案,也是唯一对我有效的解决方案。我的Docker:
复制。/nltk_data/usr/local/nltk_data
COPY ./tokenizers /root/nltk_data/tokenizers