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
相关产品推荐
相关产品推荐

