无法启动Daphne服务器:ModuleNotFoundError: No module named 'apps'
Daphne启动报错ModuleNotFoundError: No module named 'apps'解决方法
问题重现
启动Daphne时出现以下错误:
Traceback (most recent call last): File "/usr/local/bin/daphne", line 8, in <module> sys.exit(CommandLineInterface.entrypoint()) File "/usr/local/lib/python3.8/site-packages/daphne/cli.py", line 171, in entrypoint cls().run(sys.argv[1:]) File "/usr/local/lib/python3.8/site-packages/daphne/cli.py", line 233, in run application = import_by_path(args.application) File "/usr/local/lib/python3.8/site-packages/daphne/utils.py", line 12, in import_by_path target = importlib.import_module(module_path) File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1014, in _gcd_import File "<frozen importlib._bootstrap>", line 991, in _find_and_load File "<frozen importlib._bootstrap>", line 961, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "<frozen importlib._bootstrap>", line 1014, in _gcd_import File "<frozen importlib._bootstrap>", line 991, in _find_and_load File "<frozen importlib._bootstrap>", line 973, in _find_and_load_unlocked ModuleNotFoundError: No module named 'apps'
相关配置文件:
/home/prassel/apps/asgi.py:
django_asgi_app = get_asgi_application() application = ProtocolTypeRouter( { "http": django_asgi_app, "websocket": URLRouter([path('ws/notifications/', NotificationConsumer.as_asgi())]), } )
docker-compose.yml中的daphne服务:
daphne: platform: linux/amd64 build: context: . dockerfile: Dockerfile.daphne command: 'sh -c "daphne -b 0.0.0.0 -p 8000 apps.asgi:application"' restart: always working_dir: /home/prassel
Dockerfile.daphne:
FROM python:3.8-buster ENV PYTHONUNBUFFERED 1 ARG REQUIREMENTS_FILE WORKDIR /home/prassel/ RUN pip install daphne
问题原因
- 容器内无项目代码:docker-compose未配置本地代码挂载,容器内
/home/prassel目录为空,找不到apps模块。 - Python路径未配置:即使有代码,项目根目录可能不在Python的sys.path中,导致无法导入
apps模块。 - 依赖缺失:仅安装了daphne,缺少Django及项目其他依赖。
- asgi.py导入不完整:未配置Django环境变量及必要的导入语句。
解决步骤
1. 配置Docker代码挂载
修改docker-compose.yml,添加volumes将本地代码挂载到容器内:
daphne: platform: linux/amd64 build: context: . dockerfile: Dockerfile.daphne command: 'sh -c "daphne -b 0.0.0.0 -p 8000 apps.asgi:application"' restart: always working_dir: /home/prassel volumes: - ./:/home/prassel # 本地当前目录映射到容器内项目目录
2. 完善asgi.py配置
在apps/asgi.py开头添加Python路径配置和Django环境变量:
import os import sys from django.core.asgi import get_asgi_application from django.urls import path # 替换为你的consumer实际路径 from apps.your_app.consumers import NotificationConsumer # 将项目根目录添加到Python搜索路径 sys.path.append('/home/prassel') # 设置Django配置模块,替换为你的项目名(比如manage.py所在目录的名称) os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings') django_asgi_app = get_asgi_application() application = ProtocolTypeRouter( { "http": django_asgi_app, "websocket": URLRouter([path('ws/notifications/', NotificationConsumer.as_asgi())]), } )
3. 完善Dockerfile安装依赖
修改Dockerfile.daphne,安装Django及项目依赖:
FROM python:3.8-buster ENV PYTHONUNBUFFERED 1 WORKDIR /home/prassel/ # 优先使用requirements.txt安装依赖(如果项目有该文件) COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 如果没有requirements.txt,直接安装必要依赖 # RUN pip install django daphne
4. 验证项目结构
确保项目根目录/home/prassel下存在manage.py,且apps是其中一个合法的Django应用(包含__init__.py文件)。
内容的提问来源于stack exchange,提问作者Neo
相关产品推荐
相关产品推荐

