使用Distroless镜像时无法导入自定义Python模块问题求助
解决自定义模块无法导入的问题
错误原因
你设置的PYTHONPATH环境变量为/source,但实际source目录通过COPY . /app被复制到了容器内的/app/source路径下,Python无法在/source路径找到memory.py模块,导致导入失败。
解决方案
方案1:修正PYTHONPATH路径
修改Dockerfile中的PYTHONPATH配置,指向容器内实际的source目录位置:
FROM gcr.io/distroless/python3-debian11 COPY --from=build /venv /venv COPY . /app WORKDIR /app ENV PYTHONPATH /app/source # 修正为实际路径 ENTRYPOINT ["/venv/bin/python3", "scripts/main.py"]
方案2:优化Dockerfile(可选)
Build阶段的代码复制操作是多余的,因为第二阶段已经通过COPY . /app复制了所有代码,可删除Build阶段的无关命令,简化Dockerfile:
FROM debian:11-slim AS build RUN apt-get update && \ apt-get install --no-install-suggests --no-install-recommends --yes python3-venv gcc libpython3-dev && \ python3 -m venv /venv && \ /venv/bin/pip install --upgrade pip setuptools wheel FROM gcr.io/distroless/python3-debian11 COPY --from=build /venv /venv COPY . /app WORKDIR /app ENV PYTHONPATH /app/source ENTRYPOINT ["/venv/bin/python3", "scripts/main.py"]
验证
重新构建镜像并运行容器,Python将能正确找到/app/source下的memory模块,导入错误即可解决。
内容的提问来源于stack exchange,提问作者bonijad383
相关产品推荐
相关产品推荐

