在Docker容器中导入python文件

问题描述 投票:0回答:3

运行我的 docker 映像时,出现导入错误:

File "./app/main.py", line 8, in <module>
import wekinator
ModuleNotFoundError: No module named 'wekinator'`

如何在 Docker 中导入本地 python 模块? COPY 命令不会复制整个“app”文件夹(包括两个文件),从而保留正确的导入位置吗?

.
├── Dockerfile
├── README.md
└── app
    ├── main.py
    └── wekinator.py
FROM python:3.7

RUN pip install fastapi uvicorn python-osc

EXPOSE 80

COPY ./app /app

CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
python docker python-import
3个回答
9
投票

经过多次困惑,我通过在 Dockerfile 中设置 PYTHONPATH 环境变量来运行容器:

ENV PYTHONPATH "${PYTHONPATH}:/app/"

3
投票

PYTHONPATH
设置为这样可以,但感觉很笨拙:

ENV PYTHONPATH "${PYTHONPATH}:/app/"

使用 Docker 的

WORKDIR
可以提供更干净的解决方案:

FROM python:3.7

WORKDIR /code

RUN pip install fastapi uvicorn python-osc

EXPOSE 80

COPY app ./app

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

注意

COPY
语句如何变化。


3
投票

您需要查看您在安装时使用的是哪个

WORKDIR

似乎您正在尝试从工作目录执行脚本,但您正在将数据复制到容器内的根文件夹。

创建你的docker,运行它并检查在

COPY
命令中复制的文件是否位于正确的文件夹中。

您可以运行

docker compose exec <name of your container> ls
来执行此操作,并检查
ls
命令是否列出了您尝试调用的文件夹。

© www.soinside.com 2019 - 2024. All rights reserved.