Ubuntu 20.04 WSL下docker-compose build报错文件不存在但实际存在
问题原因
本地执行pip install -e .[dev]正常是因为本地项目目录下存在完整的README.md、源码目录等依赖文件,但Docker构建过程中,你仅通过COPY指令将setup.py、init.sql传入了镜像,README.md和源码目录并未被复制到镜像内的/home/asdf1234/路径下,所以setup.py执行时找不到对应文件抛出异常。
解决步骤
- 修改Dockerfile,补充缺失文件的COPY指令,修改后的Dockerfile参考如下:
FROM python:3.8 ENV PYTHONUNBUFFERED 1 WORKDIR /home/asdf1234/ COPY setup.py /home/asdf1234/setup.py # 补充复制README.md COPY README.md /home/asdf1234/README.md # 补充复制源码目录(setup.py中配置了packages从src目录查找,必须复制) COPY src/ /home/asdf1234/src/ COPY init.sql /docker-entrypoint-initdb.d/ RUN pip install -e .[dev] CMD ["flask", "run", "--eager-loading", "-h", "0.0.0.0", "-p", "5000"]
- 检查项目根目录的
.dockerignore文件,确认没有将README.md、src目录加入忽略规则,如果存在对应条目直接删除即可。 - 重新执行
docker-compose build命令即可正常构建。
如果仅需要临时调试避免报错,也可以修改setup.py给读取README.md的逻辑增加异常捕获,该方案不建议长期使用:
try: with open(path.join(THIS_DIRECTORY, "README.md"), encoding="utf-8") as f: LONG_DESCRIPTION = f.read() except FileNotFoundError: LONG_DESCRIPTION = DESCRIPTION
内容的提问来源于stack exchange,提问作者Aditya
相关产品推荐
相关产品推荐

