当前位置: 首页 > 知识库问答 >
问题:

Windows Docker-python中的Spacy语言模型安装返回ImportError:DLL加载失败:找不到指定的模块

刘奇
2023-03-14

我正在构建一个基于Windows的Docker映像以运行Flask应用程序。为此,我需要安装SpaCy语言模型。但我一次又一次地遇到以下问题,直到现在还没有找到任何强有力的解决方案。

运行时:Windows容器(Docker)

错误跟踪:

Step 6/9 : RUN python -m spacy download en_core_web_sm
 ---> Running in 6f8f33207c8f
        Traceback (most recent call last):
      File "C:\Python\lib\runpy.py", line 183, in _run_module_as_main
        mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
      File "C:\Python\lib\runpy.py", line 142, in _get_module_details
        return _get_module_details(pkg_main_name, error)
      File "C:\Python\lib\runpy.py", line 109, in _get_module_details
        __import__(pkg_name)
      File "C:\Python\lib\site-packages\spacy\__init__.py", line 12, in <module>
        from . import pipeline
      File "C:\Python\lib\site-packages\spacy\pipeline\__init__.py", line 4, in <module>
        from .pipes import Tagger, DependencyParser, EntityRecognizer, EntityLinker
      File "pipes.pyx", line 1, in init spacy.pipeline.pipes
    ImportError: DLL load failed: The specified module could not be found.

Dockerfile:

FROM winamd64/python:3.7-windowsservercore
COPY requirements.txt .
COPY models/* ./models/
RUN pip install --no-cache-dir -r requirements.txt
RUN python -m nltk.downloader stopwords
RUN python -m spacy download en_core_web_sm
COPY . .
EXPOSE 5000
CMD python waitress_server.py

requirements.txt:

Flask==1.1.1
future==0.17.1
httplib2==0.13.1
nltk==3.4.5
numpy==1.18.2
pandas
pandocfilters==1.4.2
pickleshare==0.7.5
regex==2019.8.19
requests>=2.13.0
requests-oauthlib
requests-toolbelt
scikit-learn==0.22.1
scipy==1.3.1
simplejson==3.16.0
urllib3==1.24.3
xlrd==1.2.0
zipp==0.6.0
lightgbm
sner
flask-bcrypt
waitress==1.4.4
spacy

服务员。py:

print("Hello World")

其他文件是一些经过训练的NLP模型。

注:

  • 我尝试了多个版本的windows映像,但没有结果
  • 我尝试了多个NumPy和spacy版本
  • 在GitHub上发现问题https://github.com/explosion/spaCy/issues/4733#issuecomment-561123652但这似乎并不能解决问题

提前谢谢!

共有1个答案

须鸿祯
2023-03-14

从GitHub上的类似问题来看,这似乎是在本机操作系统上运行spacy而不是在VirtualNV中运行spacy时造成的。建议的方法是从容器上的vitrualenv安装并运行依赖项。

为此,您需要通过在dockerfile中设置VIRTUAL_ENV和PATH环境变量来手动激活虚拟环境。

# Set up and activate virtual environment
ENV VIRTUAL_ENV "/venv"
RUN python -m venv $VIRTUAL_ENV
ENV PATH "$VIRTUAL_ENV/bin:$PATH"

来自:源

因此,您的dockerfile应该如下所示:

FROM winamd64/python:3.7-windowsservercore

ENV VIRTUAL_ENV "/venv"
RUN python -m venv $VIRTUAL_ENV
ENV PATH "$VIRTUAL_ENV/bin:$PATH"

# Set up and activate virtual environment
COPY requirements.txt .
COPY models/* ./models/
RUN pip install --no-cache-dir -r requirements.txt
RUN python -m nltk.downloader stopwords
RUN python -m spacy download en_core_web_sm
COPY . .
EXPOSE 5000
CMD python waitress_server.py

免责声明:我自己还没有测试过这个,但是看到了各种类似的DLL问题,包括python包和在venv中运行是常见的解决方案。

 类似资料:
  • 问题内容: 我在这里遵循pycairo安装说明:http : //www.cs.rhul.ac.uk/home/tamas/development/igraph/tutorial/install.html 安装pycairo以与igraph一起使用。 但是,即使在运行安装程序并根据说明将所有DLL解压缩/复制到site-packages cairo目录之后,我仍然会收到以下错误消息: 我正在Win

  • 问题内容: 我在Windows 7 64位上使用Anaconda 3.1.0。我已经安装了tensorflow(GPU)。运行以下命令时出现错误。 完整的追溯 问题答案: cudnn lib版本是错误的,所以我替换了正确版本的cudnn lib,它起作用了。

  • 嗨,我正试图将我的Django v1.3应用程序从DJANGO Dev服务器移植到Apache的mod_wsgi上,它在同一台Windows XP机器上给出了一个错误。 Django调试的错误消息: ViewDoesNotExist at /administration/feeds/ 无法导入 plunk4.错误是:DLL 加载失败:找不到指定的模块。 请求方式:GET请求URL:localhos

  • 问题内容: 我已经开始使用Python处理图片,并且想开始使用PIL(枕头)。要安装它,我跑了。安装时,以前未安装PIL。我还尝试卸载并重新安装它,以及使用。 当我在Python中运行它时,第一行是: 我检查了目录,并且PIL文件夹下存在文件_imaging.cp36-win_amd64.pyd。 如果存在所需的DLL,为什么会发生这种情况?我该如何解决? 问题答案: 我在Python 3.6中也

  • 问题内容: 我必须安装Shapely软件包(http://toblerity.org/shapely/project.html#installation)。但是当我使用时: 我收到此错误: 而且,当我使用时: 我收到此错误: 我在Windows 10(64位)上使用Python 3.6.0(Anaconda3)。 请帮忙。(无济于事) 问题答案: 使用http://www.lfd.uci.edu/

  • 我正在使用Python 3.7的Anaconda发行版。在安装的软件包中,我有numpy、熊猫等。在PyCharm IDE中,我将项目解释器设置为使用Anaconda安装的python.exe的路径:C:\用户\my_user_name\AppData\本地\连续体\anaconda3\python.exe 但是,当我尝试运行一个简单的python脚本时: 我得到一个错误: 我试过使用Anacon