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

配置分模块DJANGO_SETTINGS_MODULE时Django部署报错求助

Django部署到DigitalOcean的模块找不到问题

问题背景

在DigitalOcean部署Django应用,构建成功但部署阶段报错。最初提示找不到config模块,怀疑是wsgi.py里的os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config")配置有问题。配置文件采用Python模块结构,包含common、local、production三个设置文件。修改Dockerfile设置环境变量后,新报错变为ModuleNotFoundError: No module named 'users'。

初始错误追踪

[2022-07-31 03:29:55] Traceback (most recent call last):
[2022-07-31 03:29:55]   File "<frozen importlib._bootstrap>", line 908, in _find_spec
[2022-07-31 03:29:55] AttributeError: 'ConfigurationImporter' object has no attribute 'find_spec'
...
[2022-07-31 03:29:55] ImportError: No module named 'config'

文件结构

monorepo/backend-server
├── Dockerfile
├── README.md
├── config
│   ├── __init__.py
│   ├── common.py
│   ├── local.py
│   └── production.py
├── docker-compose.yml
├── manage.py
├── requirements.txt
├── urls.py
├── wait_for_postgres.py
└── wsgi.py

关键文件代码

wsgi.py

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config")
os.environ.setdefault("DJANGO_CONFIGURATION", "Production")

# sys.path.append("/scraft-server")

from configurations.wsgi import get_wsgi_application  # noqa

application = get_wsgi_application()

config.common.py

import os
from os.path import join
from distutils.util import strtobool
from dotenv import load_dotenv
import datetime
import dj_database_url
from configurations import Configuration

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

load_dotenv()

class Common(Configuration):

    # settings

初始Dockerfile

FROM python:3.8
ENV PYTHONUNBUFFERED 1

# 让Docker在构建之间缓存已安装的依赖
COPY ./requirements.txt requirements.txt
RUN pip install -r requirements.txt

# 将应用代码添加到镜像中
WORKDIR /code/scraft-server
COPY scraft-server .  
WORKDIR /code

EXPOSE 8000

# 运行生产服务器
CMD newrelic-admin run-program gunicorn --bind localhost:$PORT --access-logfile - scraft-server.wsgi:application

修改后的Dockerfile

FROM python:3.8
ENV PYTHONUNBUFFERED 1
ENV DJANGO_SETTINGS_MODULE backend-server.config.production
ENV DJANGO_CONFIGURATION Production
# ENV DJANGO_SETTINGS_MODULE backend-server.config.production

# 让Docker在构建之间缓存已安装的依赖
COPY ./requirements.txt requirements.txt
RUN pip install -r requirements.txt

# 将应用代码添加到镜像中
WORKDIR /code/backend-server
COPY backend-server .  
WORKDIR /code

EXPOSE 8000

# 运行生产服务器
CMD newrelic-admin run-program gunicorn --bind localhost:$PORT --access-logfile - backend-server.wsgi:application

新错误追踪

[2022-07-31 05:49:23]   File "/code/scraft-server/wsgi.py", line 14, in <module>
[2022-07-31 05:49:23]     from configurations.wsgi import get_wsgi_application  # noqa
[2022-07-31 05:49:23]   File "/usr/local/lib/python3.8/site-packages/configurations/wsgi.py", line 8, in <module>
[2022-07-31 05:49:23]     application = get_wsgi_application()
...
[2022-07-31 05:49:23] ModuleNotFoundError: No module named 'users'

解决方案建议

  • 修正Python路径:在Dockerfile中添加ENV PYTHONPATH="/code/backend-server",或者取消wsgi.py中sys.path.append("/code/backend-server")的注释,确保应用根目录在Python搜索路径内。
  • 修复模块命名问题:Python模块名不允许含连字符,将backend-server目录重命名为backend_server,同时更新Dockerfile中的环境变量DJANGO_SETTINGS_MODULE为backend_server.config.production,Gunicorn启动命令改为backend_server.wsgi:application。
  • 验证代码复制情况:进入容器检查/code/backend-server目录下是否存在users模块(含__init__.py的文件夹),确认代码被完整复制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:09:48