Docker-Compose启动FastAPI消费者遇ModuleNotFoundError问题求助
解决Docker中运行Python脚本时
ModuleNotFoundError: No module named 'core'的问题 出现这个错误的核心原因是Python的模块搜索路径(sys.path)中没有包含项目根目录(/app),导致无法识别同级的core目录。
当你用python consumers/modules_consumer.py直接运行脚本时,Python会自动将脚本所在的目录(/app/consumers)加入sys.path,但不会把当前工作目录(/app)加入。而core目录在/app下,自然无法被识别为可导入模块。
下面是几种可行的解决方案:
方案1:以模块方式运行脚本(推荐)
修改docker-compose中consumer-modules的command,使用-m参数以模块形式启动脚本:
consumer-modules: build: context: ../app volumes: - ../app:/app depends_on: - db command: sh -c "python3 -m consumers.modules_consumer"
这种方式会让Python将当前工作目录(/app)加入sys.path,就能正确识别core模块了。
方案2:手动添加项目根目录到sys.path
在modules_consumer.py的开头添加以下代码,强制把项目根目录加入Python的搜索路径:
import sys from pathlib import Path # 获取项目根目录(/app)并加入sys.path sys.path.append(str(Path(__file__).parent.parent)) from core import settings # 其他代码...
方案3:设置PYTHONPATH环境变量
在Dockerfile或docker-compose中设置PYTHONPATH为项目根目录,确保Python始终能找到该路径下的模块:
方式A:在Dockerfile中添加环境变量
ENV PYTHONUNBUFFERED 1 ENV PYTHONPATH=/app # 添加这一行 COPY . /app WORKDIR /app # 后续原有代码...
方式B:在docker-compose.yaml中添加环境变量
consumer-modules: build: context: ../app volumes: - ../app:/app depends_on: - db environment: - PYTHONPATH=/app # 添加这一部分 command: sh -c "python3 consumers/modules_consumer.py"
内容的提问来源于stack exchange,提问作者serg
相关产品推荐
相关产品推荐

