繁体   English   中英

使用 Docker 部署我的 Python (FastAPI) 应用程序:ModuleNotFoundError: No module named 'FolderInStructure'

[英]Deploying my Python (FastAPI) Application with Docker: ModuleNotFoundError: No module named 'FolderInStructure'

我正在尝试使用 Docker 部署我的 fastAPI 应用程序。 它是一个更大系统的一部分,我稍后会尝试使用 docker-compose 相互连接。 它在本地运行良好,但是当我尝试部署它时,它没有找到我的子目录。 我在所有目录中都有__init__.py文件。

这是我的项目结构:
在此处输入图像描述

这是我的 Dockerfile:

FROM python:3.8

WORKDIR /code

COPY ./requirements.txt /code/requirements.txt

RUN python3.8 -m pip install --no-cache-dir --upgrade -r /code/requirements.txt

COPY ./app /code/app

CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

Dockerfile 取自 FastAPI 文档,我还尝试手动复制 main.py 和 recognition_service 目录(并设置 python 环境),但它没有改变错误(虽然可能做错了)。 构建顺利,没有错误,运行仅在导入之前有效

from recognition_service.json_reader import Json_Reader

在我的 main.py 中,这会导致错误

File "/code/./app/main.py", line 3, in <module>
    from recognition_service.json_reader import Json_Reader
ModuleNotFoundError: No module named 'recognition_service'

这可能有一些我正在监督的明显解决方案,因为这是我第一次使用 Python 有一个“更大”的应用程序,但我希望在这里找到一些帮助。


附带说明一下,在 json_reader.py 中,还有 spacy 子目录中的文件的导入,每个文件都与各自的 spacy 模型交互。

编辑:被要求提供 requirements.txt:

fastapi==0.79.0
scipy==1.7.3
pydantic==1.8.2
uvicorn==0.17.6
uvloop==0.16.0

它肯定与 venv 和路径有关,这是一个旧的 fastapi dockek 与您的代码相结合

FROM python:3.8-slim-buster

ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

# install system dependencies
RUN apt-get update \
    && apt-get -y install gcc make \
    && rm -rf /var/lib/apt/lists/*s

WORKDIR /code

ENV VIRTUAL_ENV=/opt/venv
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"

COPY ./requirements.txt /code/requirements.txt

RUN pip install -r /code/requirements.txt

EXPOSE 8000

COPY ./app /code/app

CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM