Python项目在Docker中找不到模块

5
我正在尝试使用以下Dockerfile在docker中运行一个Python项目,用于机器学习目的:
FROM python:3

RUN apt-get update \
    && apt-get install -yq --no-install-recommends \
    python3 \
    python3-pip
RUN pip3 install --upgrade pip==9.0.3 \
    && pip3 install setuptools

# for flask web server
EXPOSE 8081

# set working directory
ADD . /app
WORKDIR /app

# install required libraries
COPY requirements.txt ./
RUN pip3 install -r requirements.txt

# This is the runtime command for the container
CMD python3 app.py

这是我的要求文件:

flask
scikit-learn[alldeps]
pandas
textblob
numpy
matplotlib[alldeps]

但是当我尝试导入textblob和pandas时,在我的docker cmd中出现了“没有模块名为X”的错误。在此输入图片描述
|    warnings.warn(msg, category=FutureWarning)
| Traceback (most recent call last):
|    File "app/app.py", line 12, in <module>
|      from textblob import Textblob
| ImportError: No module named 'textblob'
exited with code 1

文件夹结构

machinelearning:
    backend:
        app.py
        Dockerfile
        requirements.txt
    frontend:
        ... (frontend works fine.)
    docker-compose.yml

有人知道这个问题的解决方案吗?(我对Docker还比较新,可能是我漏掉了一些关键点。)


您不需要显式安装pip或python。它们已经包含在镜像中了。我也很困惑为什么您要降级PIP。我会删除前两个RUN命令。另外,您的Docker构建输出是什么?这可能与您运行一个10个版本旧的pip有关吗? - Mies van der Lippe
尝试导入先前提到的模块时,我移除了前两次运行,由于无法找到要求文件中提到的模块,Python会退出,并显示代码1。 (因此结果相同。) - Alexander Bruun
我刚刚按原样运行了它,即使安装了冗余的Python并降级了pip,如@MiesvanderLippe所提到的,它仍然可以正常工作并导入模块。可能是路径相关的问题。 - Alexey Kuzminich
请展示您的应用程序结构(为什么在将整个目录复制到/app时要复制requirements.txt),或者展示docker build的输出。另外,请不要使用图片。 - Lesiak
我将文件夹结构添加到原始消息中。 - Alexander Bruun
显示剩余4条评论
2个回答

1
这对我起作用了。
FROM python:3

RUN apt-get update
RUN apt-get install -y --no-install-recommends

# for flask web server
EXPOSE 8081

# set working directory
WORKDIR /app

# install required libraries
COPY requirements.txt .
RUN pip install -r requirements.txt

# copy source code into working directory
COPY . /app

# This is the runtime command for the container
CMD python3 app.py

你能够导入Textblob和Pandas吗? - Alexander Bruun
Jip,它起作用了,也许只需要刷新你的 requirements.txt 文件。pip freeze > requirements.txt - Lambo
我尝试创建一个全新的Docker项目,这也对我起作用了。非常奇怪为什么以前的项目不能工作。 - Alexander Bruun
如果你安装了两个或更多的版本,通常需要选择正确的pip和Python版本。 - questionto42
我认为代码在“recommends”之后被截断了。 - questionto42

-1
在Linux上,每当您收到以下消息时:

ImportError: No module named 'XYZ'`

使用apt-get检查您是否可以安装它或其依赖项,以下是一个示例,虽然对于textblob无效,但可能有助于其他模块:

(这个示例不起作用;它通常有帮助,但在这里不行)

# Python3:
sudo apt-get install python3-textblob
# Python2:
sudo apt-get install python-textblob

查看Python 错误 "ImportError: No module named" 或者 如何解决在导入 Flask 时出现“无法从'werkzeug.exceptions'导入名称'abort'的错误

对于 "textblob",它不适用于 python2.7,并且我没有在 python3 上进行测试,但是它也可能不起作用,但在这种情况下,应该尝试一下。

而且不需要猜测,可以使用正则表达式在 apt 缓存中搜索。然后执行以下操作:

$ apt-cache search "python.*blob"
libapache-directory-jdbm-java - ApacheDS JDBM Implementation
python-git-doc - Python library to interact with Git repositories - docs
python-swagger-spec-validator-doc - Validation of Swagger specifications (Documentation)
python3-azure-storage - Microsoft Azure Storage Library for Python 3.x
python3-bdsf - Python Blob Detection and Source Finder
python3-binwalk - Python3 library for analyzing binary blobs and executable code
python3-discogs-client - Python module to access the Discogs API
python3-git - Python library to interact with Git repositories - Python 3.x
python3-mnemonic - Implementation of Bitcoin BIP-0039 (Python 3)
python3-nosehtmloutput - plugin to produce test results in html - Python 3.x
python3-swagger-spec-validator - Validation of Swagger specifications (Python3 version)
python3-types-toml - Typing stubs for toml
python3-types-typed-ast - Typing stubs for typed-ast

需要检查是否有一些针对 "textblob" 的Python软件包可用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接