You need to enable JavaScript to run this app. Python导入项目内部模块报ModuleNotFoundError及ImportError问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Python导入项目内部模块报ModuleNotFoundError及ImportError问题求助

Django 跨平级目录导入报错的解决

问题核心成因

两个连续的导入报错,本质是Python模块搜索路径规则、相对导入边界规则和项目目录层级不匹配导致的,和代码逻辑本身无关。
先把你当前的项目层级再明确一遍:

website/  <-- 项目根目录(运行manage.py启动服务的目录,这个目录会被自动加入Python模块搜索路径)
├── pages/  <-- 业务代码目录
│   └── views.py
└── website/  <-- 项目配置目录,和pages目录平级
    └── urls.py

之前的导入语句为什么会报错

  • 写from website.pages import views报ModuleNotFoundError:
    Python会从项目根目录往下遍历找模块,pages目录是和website配置目录平级的一级目录,根本不存在于website配置目录的内部层级下,自然识别不到website.pages这个模块路径。
  • 写from ..pages import views报ImportError:
    相对导入不能跳出当前所在的Python包的范围。urls.py位于website配置目录内,这个目录是Python识别到的顶层包,往上跳一级就直接超出了包的边界,因此会触发超出顶层包范围的报错。

正确的导入写法

因为pages是项目根目录下的一级目录,直接从根目录层级引入即可,把urls.py里的导入语句改成:

from pages import views

后续绑定路由的示例参考:

# website/urls.py 完整示例
from django.urls import path
from pages import views

urlpatterns = [
    path("home/", views.home, name="home")
]

快速排障校验项

  • 检查pages目录下是否存在空的__init__.py文件,缺失这个文件Python不会把目录识别为可导入的Python包
  • 不要手动修改系统的PYTHONPATH环境变量,Django启动时已经自动把项目根目录加入了模块搜索路径,额外的路径配置反而容易引发路径识别混乱
  • 即使后续对项目外层根目录做了重命名,只要保证pages和项目配置目录始终同属项目根目录,上述导入写法就可以正常运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 20:06:09