You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask+Gunicorn+Docker部署时报no module named api错误求助

错误原因

Gunicorn启动时Python无法找到名为api的包,根源是容器内目录结构和导入语句不匹配:
你的Dockerfile中WORKDIR /api指定工作目录为/api,COPY ./api ./指令会把宿主机本地api目录下的所有内容直接复制到容器内的/api路径下。如果你的Flask实例app定义在/api/__init__.py中,wsgi.py也放在/api路径下,此时写from api import app时,Python会在搜索路径中查找名为api的子包(即需要存在/api/api/__init__.py),找不到就会抛出导入错误。

解决方案

方案1:修改wsgi.py导入语句(最简单)

将wsgi.py的内容改为:

from . import app

if __name__ == "__main__":
    app.run()

用同目录相对导入直接读取__init__.py中定义的app实例即可。

方案2:添加Python搜索路径

如果不想改动项目代码,可以在Dockerfile中新增环境变量指定搜索路径:
在原有ENV配置后加一行:

ENV PYTHONPATH=/

这样Python会把根目录加入搜索路径,/api目录就会被识别为名为api的包,原有from api import app语句就可以正常运行。

方案3:调整Docker复制路径

如果你的项目结构设计就是api作为顶层包,可以修改COPY指令,把整个api目录复制为容器内/api下的子包:

# 把原来的COPY ./api ./ 替换为
COPY ./api /api/api

此时容器内路径为/api/api/__init__.py,和/api/wsgi.py同级的api子包可以被正常识别。

验证方法

修改前可以先执行以下命令查看容器内的目录结构,确认文件位置:

docker run --rm <你的镜像名称> ls -R /api

内容的提问来源于stack exchange,提问作者HelgiBergmann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:36:05