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

Google Cloud App Engine部署Django+Daphne应用无法加载求助

Django + Daphne部署GAE报错排查:ModuleNotFoundError: No module named 'trip_tracker_project'

问题描述

部署到Google Cloud App Engine的Django应用(搭配Daphne ASGI以支持WebSockets和WebRTC)无法加载,GAE日志中报错:

ModuleNotFoundError: No module named 'trip_tracker_project'

目录结构

  • 主根目录(包含manage.py):trip_tracker_project(本地路径:Desktop/trip_tracker_project)
  • 存放settings.py的项目子目录:trip_tracker(本地路径:Desktop/trip_tracker_project/trip_tracker)

已尝试操作

  • 移除根目录下的google-cloud-sdk
  • 在app.yaml中添加PYTHONPATH: "/app"
  • 修改asgi.py中的os.environ.setdefault('DJANGO_SETTINGS_MODULE', ...),从'trip_tracker.settings'改为'trip_tracker_project.settings'
    执行gcloud app deploy部署后,仍出现超时问题且报错相同,怀疑app.yaml的entrypoint配置存在问题,寻求排查方法。

相关配置

app.yaml

runtime: python310
instance_class: F2
entrypoint: daphne -u /tmp/daphne.sock trip_tracker.asgi:application
automatic_scaling:
  target_cpu_utilization: 0.65
  min_instances: 1
  max_instances: 15
env_variables:
  DJANGO_SETTINGS_MODULE: "trip_tracker.settings"
  PYTHONPATH: "/app"

修改前的asgi.py

import os
from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.auth import AuthMiddlewareStack
import video_chat.routing

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'trip_tracker.settings')

application = ProtocolTypeRouter({
    "http": get_asgi_application(),
    "websocket": AuthMiddlewareStack(
        URLRouter(
            video_chat.routing.websocket_urlpatterns
        )
    ),
})

排查方案

1. 明确部署上下文的模块逻辑

GAE部署时,会将你执行gcloud app deploy的目录作为容器内的/app根目录。你本地是在trip_tracker_project目录下执行部署,因此容器内的/app就对应这个目录,trip_tracker_project本身不是一个Python模块——它是部署根目录,不要用它作为模块名来引用配置。

2. 统一配置文件的模块路径

  • 将asgi.py改回原配置:os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'trip_tracker.settings'),确保和app.yaml中的DJANGO_SETTINGS_MODULE值完全一致。
  • 检查trip_tracker目录下是否存在__init__.py文件(空文件即可),Python需要这个文件识别该目录为合法模块。

3. 验证entrypoint的正确性

当前entrypointdaphne -u /tmp/daphne.sock trip_tracker.asgi:application是正确的,前提是asgi.py确实在/app/trip_tracker目录下。如果本地目录结构符合要求,这个路径无需修改。

4. 检查依赖与PYTHONPATH

  • 确保requirements.txt中包含daphne、channels及Django相关依赖,GAE会自动安装这些包。
  • 当前PYTHONPATH: "/app"配置正确,无需额外添加子目录,因为/app作为根目录,其下的子模块(如trip_tracker、video_chat)会被Python自动识别。

5. 本地模拟部署环境测试

  • 在本地执行gcloud app run启动模拟服务,复现错误并排查。
  • 或者设置本地PYTHONPATH为根目录路径,执行daphne -u /tmp/daphne.sock trip_tracker.asgi:application,看是否出现相同报错,快速定位问题。

6. 检查其他模块的导入合法性

确认video_chat目录下同样存在__init__.py,且video_chat.routing模块能被正确导入。如果video_chat是独立的Django app,需确保它已添加到settings.py的INSTALLED_APPS中。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:15:31