首页 > 解决方案 > Python + Docker + 未找到模块

问题描述

我有一个使用 Python 和 Docker 实现的功能。

当我运行时docker-compose up -d,我能够成功构建映像,并且整个文件夹也被复制到 Docker 容器中,并且我能够在容器中看到复制的文件。

但是,在运行 Python 文件时,我收到了错误

ModuleNotFoundError: No module named "bank_transactions"

在文件 main_transactions.py 中,我已经导入了常量文件,我在下面的屏幕截图中显示了文件夹结构。

截屏

当我通过 PyCharm 运行应用程序时,它运行良好,没有任何问题。

以下是 Docker 文件配置。

码头工人-compose.yml

version: "3.6"

services:
  app :
    build: .
  db:
    image: postgres
    restart: always
    environment:
      POSTGRES_USERNAME: root
      POSTGRES_PASSWORD: root
      POSTGRES_DB: testdb
    ports:
      - 5432:5432 

Dockerfile

FROM python:3.6

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

RUN mkdir /code

WORKDIR /code

COPY . /code/

RUN pip install -r requirements.txt 

CMD [ "python", "/Transactions/bank_transactions/main_transactions.py" ]

错误日志:

Traceback (most recent call last):  
app6_1  |   File "/code/bank_transactions/main_transactions.py", line 5, in <module>
app6_1  |     from bank_transactions import constants
app6_1  | ModuleNotFoundError: No module named 'bank_transactions'

标签: python-3.xdockerdockerfile

解决方案


乍一看,您在日志中获得的错误

[…] Traceback(最近一次通话最后一次):
app6_1 | 文件“/code/bank_transactions/main_transactions.py”,第 5 行,在<module>
app6_1 | 从银行交易导入常量
app6_1 | ModuleNotFoundError:没有名为“bank_transactions”的模块

表明该文件main_transactions.py确实已解析,而该文件又会导入该constants.py文件,但该文件失败。

实际上,这与import遍历目录以查找 python 包的方式有关,我很确定您的错误应该通过设置PYTHONPATH环境变量消失:

FROM python:3.6

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

WORKDIR /code

COPY . /code/

RUN pip install -r requirements.txt 

ENV PYTHONPATH /code

CMD [ "python", "/code/bank_transactions/main_transactions.py" ]

有关更多详细信息,请参阅另一个 StackOverflow 问题(处理 Python2 - 参见 ImportError 而不是 Python3 的 ModuleNotFoundError - 但修复应该是相同的)。


推荐阅读