这一定是一个常见的问题,但我找不到合适的答案:在运行我的docker镜像时,我得到一个import错误:
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"]
3条答案
按热度按时间svmlkihl1#
在混乱之后,我通过在Dockerfile中设置PYTHONPATH env变量来运行容器:
laawzig22#
将
PYTHONPATH
设置为这样可以工作,但感觉很笨拙:使用Docker的
WORKDIR
可以提供更简洁的解决方案:注意
COPY
语句是如何改变的。piztneat3#
您需要查看您在安装中使用的
WORKDIR
。看起来你试图从你的workdir执行脚本,但是你正在将数据复制到你的容器中的根文件夹。
创建你的docker,运行它并检查
COPY
命令中复制的文件是否在正确的文件夹中。您可以运行
docker compose exec <name of your container> ls
并检查ls
命令是否列出了您试图调用的文件夹。