当前位置: 代码迷 >> python >> Docker 中的 ModuleNotFoundError
  详细解决方案

Docker 中的 ModuleNotFoundError

热度:160   发布时间:2023-07-16 10:50:54.0

我已经将我的整个项目导入到 docker 中,并且我得到了一个

模块未找到错误

从我创建的模块之一。

FROM python:3.8
WORKDIR /workspace/
COPY . /workspace/
RUN pip install pipenv
RUN pipenv install --deploy --ignore-pipfile
#EXPOSE 8000
#CMD ["pipenv", "run", "python", "/workspace/bin/web.py"]

我试着四处寻找答案,但我似乎无法让它发挥作用。

命令:

docker build -t atletico .
docker run -p 8000:8000 atletico

Docker 构建: :

Traceback (most recent call last):
  File "/workspace/bin/web.py", line 3, in <module>
    from bin.setup import setup_app
ModuleNotFoundError: No module named 'bin'

我的目录的副本:

├── Dockerfile
├── Pipfile
├── Pipfile.lock
├── README.md
├── bin
│   ├── __init__.py
│   ├── __pycache__
│   │   └── web.cpython-38.pyc
│   ├── setup.py
│   └── web.py
├── docker-compose.yml
├── frio
│   ├── __init__.py
│   ├── __pycache__
│   │   └── __init__.cpython-38.pyc
│   ├── app_events.py
│   └── config.py
├── routes
│   ├── __init__.py

docker-compose.yml:

version: '3'
services:
  db:
    image: postgres:12
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=test_db
  redis:
    image: "redis:alpine"
  web:
    env_file:
      - .env.local
    build: .
    ports:
      - "8000:8000"
    volumes:
      - .:/workspace
    depends_on:
      - db
      - redis
    command: "pipenv run python /workspace/bin/web.py"

所以我终于解决了这个问题。 对于那些可能想知道我是如何修复它的人。 您需要在Dockerfiledocker-compose.yml定义PYTHONPATH环境变量。

我遇到了同样的问题,然后在将PYTHONPATH=/workspace添加到 docker-compose.yml 后,就像示例照片中一样。 就我而言,它也可以在没有__init__.py情况下工作。

  相关解决方案