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

Django项目中为何from . import views有效但import views报错

核心原因

你的认知存在两个典型误区:

  • import foo仅会在sys.path明确列出的目录中搜索模块,默认不会自动包含当前模块所属的包目录,你之前认为“搜索范围包含当前包”的结论不成立。
  • 绝对导入(不带前导点的import语句)和相对导入(带前导点的导入语句)的搜索逻辑完全独立:绝对导入仅参考sys.path的路径列表,相对导入仅参考当前模块的文件系统位置,和sys.path没有关联。

Django场景的具体表现

Django通过manage.py启动项目时,会自动把manage.py所在的项目根目录加入sys.path。你的项目根目录下只有mysite、myapp两个子目录,没有独立的views.py文件,所以执行import views时,Python遍历sys.path的所有路径都找不到目标模块,自然抛出ModuleNotFoundError。

而from . import views属于相对导入,语句中的.指代当前模块myapp/urls.py所属的myapp包,Python会直接在myapp目录下查找views.py,所以可以正常导入。

补充说明

如果你想用绝对导入实现同样的效果,可以使用from myapp import views写法:因为myapp目录在项目根目录下,根目录已经被加入sys.path,所以这种写法也是合法的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 09:36:01