Django项目启动报错:ModuleNotFoundError: No module named 'mysite.settings'
问题原因与解决方案
核心原因
报错ModuleNotFoundError: No module named 'mysite.settings'的本质是Django项目的核心配置模块缺失:
- 正常Django项目中,
mysite.settings对应内层mysite目录下的settings.py文件,这是项目加载配置的核心入口,没有它项目无法启动。 - 从你的目录结构看,内层
mysite目录仅存在__pycache__,说明不仅settings.py,可能连wsgi.py、urls.py、__init__.py这些根应用核心文件都已丢失。 - 丢失大概率是因为原团队移交时遗漏、
.gitignore规则排除了配置文件,或是文件误删除。
解决方案
情况1:能联系原开发团队
- 直接索要内层
mysite目录下的全部核心文件:settings.py、wsgi.py、urls.py、__init__.py。 - 同时索要项目依赖清单(如
requirements.txt),避免因Django版本或第三方依赖不匹配引发新问题。
情况2:无法联系原团队,手动重建配置
步骤1:确认/重建manage.py
manage.py是Django的命令行入口,应该在外层mysite目录(包含内层mysite、templates、treeID的文件夹)下。如果缺失,创建该文件并写入以下内容:
#!/usr/bin/env python """Django's command-line utility for administrative tasks.""" import os import sys def main(): os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') try: from django.core.management import execute_from_command_line except ImportError as exc: raise ImportError( "Couldn't import Django. Are you sure it's installed and " "available on your PYTHONPATH? Did you activate the virtual environment?" ) from exc execute_from_command_line(sys.argv) if __name__ == '__main__': main()
步骤2:重建内层mysite的核心文件
进入内层mysite目录,创建以下4个文件:
__init__.py:空文件,用于标识该目录为Python模块。settings.py:项目核心配置,根据实际情况修改(比如数据库、已安装应用),基础模板如下:
from pathlib import Path BASE_DIR = Path(__file__).resolve().parent.parent SECRET_KEY = 'django-insecure-xxxxxxxxx' # 可通过`django-admin startproject`生成新密钥 DEBUG = True ALLOWED_HOSTS = [] INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'treeID', # 加入你的业务应用 ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'mysite.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR / 'templates'], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] WSGI_APPLICATION = 'mysite.wsgi.application' # 默认使用SQLite,若原项目用其他数据库需修改此处 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } } AUTH_PASSWORD_VALIDATORS = [ {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator'}, {'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator'}, {'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator'}, {'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator'}, ] LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_TZ = True STATIC_URL = 'static/' DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
注意:将代码中的
X.X.X替换为对应Django版本(几年前的项目推荐用3.2LTS或2.2LTS)。
urls.py:路由配置,基础模板如下:
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('', include('treeID.urls')), # 挂载业务应用的路由 ]
wsgi.py:WSGI服务配置,内容如下:
import os from django.core.wsgi import get_wsgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') application = get_wsgi_application()
步骤3:激活虚拟环境并安装依赖
激活项目自带的virt虚拟环境:
- Windows:
virt\Scripts\activate - Linux/macOS:
source virt/bin/activate
安装对应版本的Django,比如3.2LTS:
pip install django==3.2
若业务应用treeID有其他依赖(如图片处理用Pillow),需根据代码推断并安装。
步骤4:测试启动
回到manage.py所在目录,执行启动命令:
py manage.py runserver
若提示数据库迁移,执行:
py manage.py makemigrations py manage.py migrate
内容的提问来源于stack exchange,提问作者Clover
相关产品推荐
相关产品推荐

