Django运行Hello World应用时无法导入site、myapp模块报错咨询
Django运行Hello World示例时模块导入异常解决
问题现象
运行Django简单Hello World示例应用时触发两类导入报错:
- 抛出异常提示无法导入
site模块 - 无法从
mysite项目中导入自定义myapp应用
报错截图如下:
排查解决步骤
修复site模块导入失败问题
site是Python标准库内置模块,导入失败基本是运行环境路径错乱、虚拟环境未正确激活导致:
- 打开当前运行Django服务的终端,执行
python -c "import sys; print(sys.path)",检查输出路径是否包含当前Python版本的标准库目录、site-packages目录,路径不存在就重新配置系统PYTHONPATH环境变量 - 如果使用虚拟环境开发,先确认虚拟环境处于激活状态:Windows环境执行
venv\Scripts\activate,macOS/Linux环境执行source venv/bin/activate,激活后终端行首会显示虚拟环境名称。激活后重新执行pip install django,避免全局Python环境和虚拟环境的包版本、路径冲突
修复myapp自定义应用导入失败问题
这类报错基本是项目结构错误、配置写错、执行命令的路径不对导致:
- 先核对项目目录结构,符合Django规范的最简结构如下:
mysite/ # 项目根文件夹 ├── manage.py # 项目启动入口文件 ├── mysite/ # 项目全局配置文件夹 │ ├── __init__.py │ ├── asgi.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── myapp/ # 自定义的应用文件夹 ├── __init__.py ├── admin.py ├── apps.py ├── migrations/ ├── models.py ├── tests.py └── views.py
注意myapp必须和manage.py、内层配置用的mysite文件夹同级,不要把myapp塞进内层mysite目录,也不要放在项目根文件夹之外的路径。
- 检查
mysite/settings.py中的INSTALLED_APPS配置,Django 3.2及以上版本不要直接写app名,优先填写AppConfig完整路径避免识别失败:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'myapp.apps.MyappConfig', # 替换成自己myapp对应的AppConfig类路径 ]
- 所有Django相关命令(包括
runserver、makemigrations),都必须在存放manage.py的项目根目录下执行,不要切到内层mysite配置文件夹里运行命令,否则Python解析器无法扫描到同级的myapp模块。
校验配置
完成以上调整后,先在项目根目录执行python -c "import myapp",命令无任何输出代表app路径识别正常;再执行python manage.py check,Django会自动扫描所有配置错误,无报错后再启动服务即可正常运行。
内容的提问来源于stack exchange,提问作者BZ2021
相关产品推荐
相关产品推荐

