Poetry导出依赖部署Docker时提示找不到my_package模块求助
解决Docker部署后找不到my_package模块的问题
问题根源
poetry export命令只会导出项目的第三方依赖(即[tool.poetry.dependencies]和[tool.poetry.dev-dependencies]里的内容),不会把你自己的my_package包写入requirements.txt。所以你只安装导出的依赖时,Docker容器里根本没有安装你的项目包,自然会报no module named my_package。
解决方案
下面提供两种可行的解决思路,按需选择:
方案1:用Poetry直接在Docker里安装整个项目(推荐)
这种方式能完全保持依赖的一致性,不需要手动导出requirements.txt:
# 基于Python 3.10的轻量镜像 FROM python:3.10-slim # 设置工作目录 WORKDIR /app # 安装Poetry(如果镜像里没有的话) RUN pip install --no-cache-dir poetry # 复制Poetry配置文件(先复制这两个文件,利用Docker缓存优化构建速度) COPY pyproject.toml poetry.lock ./ # 安装所有依赖(包括你的项目包),--no-root可以先装依赖再复制源码,也可以直接用poetry install RUN poetry install --without-hashes --with dev # 复制项目源码到容器 COPY src/ ./src/ # 替换成你实际的启动命令 CMD ["python", "-m", "my_package"]
方案2:继续用export的requirements.txt,额外安装自己的包
如果坚持要使用导出的requirements.txt,需要在Docker里额外安装你的项目包:
- 先执行你原来的export命令导出依赖:
poetry export --format requirements.txt --output poetry-requirements.txt --without-hashes --with dev
- 编写Dockerfile:
FROM python:3.10-slim WORKDIR /app # 复制导出的依赖文件 COPY poetry-requirements.txt ./ # 安装第三方依赖 RUN pip install --no-cache-dir -r poetry-requirements.txt # 复制项目源码 COPY src/ ./src/ # 安装你的my_package包(这一步是关键) RUN pip install . # 或者也可以通过设置PYTHONPATH让Python找到src目录(不推荐,不如安装包规范) # ENV PYTHONPATH=/app/src # 启动命令 CMD ["python", "-m", "my_package"]
补充说明
你的项目采用src布局是规范的做法,Poetry的packages = [{ include = "my_package", from = "src" }]配置也没问题,核心问题就是自己的包没有被安装到Docker容器的Python环境中,只要补上这一步就能解决问题。
内容的提问来源于stack exchange,提问作者sandy560
相关产品推荐
相关产品推荐

