本文详解在 Django 项目中跨目录导入自定义模块(如 seleniumtrack.py)时出现 ModuleNotFoundError 的根本原因与标准解决方案,涵盖 Python 路径配置、相对/绝对导入写法及项目结构优化建议。
本文详解在 django 项目中跨目录导入自定义模块(如 `seleniumtrack.py`)时出现 `modulenotfounderror` 的根本原因与标准解决方案,涵盖 python 路径配置、相对/绝对导入写法及项目结构优化建议。
在你的 Django 项目结构中,seleniumtrack.py 位于顶层 python/ 目录下,而 views.py 位于 tracklist/downloader/ 子目录中。此时直接使用 import seleniumtrack 会失败——因为 Python 解释器默认只将当前模块所在目录(即 downloader/)及其 sys.path 中注册的路径纳入模块搜索范围,而 python/ 并未自动包含其中。
✅ 正确做法是:使用绝对导入(Absolute Import)并确保 python/ 是一个可导入的 Python 包。具体分三步操作:
-
将 python/ 变为合法包
在 python/ 目录下添加空文件 __init__.py(即使为空),使其被 Python 识别为包:python/ ├── __init__.py ← 新增此文件 └── seleniumtrack.py
-
在 views.py 中使用绝对导入
修改导入语句为:from python.seleniumtrack import scrape # 推荐:只导入所需函数 # 或 # import python.seleniumtrack as seleniumtrack
⚠️ 注意:不要写 from seleniumtrack import scrape(缺少包前缀),也不要写 from ..python.seleniumtrack import scrape(相对导入在非包内不适用,且 views.py 不在包中)。
提示词大师-python版下载图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍
-
确保 Django 项目根目录在 PYTHONPATH 中
启动 Django 服务前,确认终端当前工作目录是 tracklist/(即含 manage.py 的目录),并确保该路径已加入 Python 模块搜索路径。推荐在运行 python manage.py runserver 前执行:export PYTHONPATH="${PYTHONPATH}:/full/path/to/your/project/root" # 例如:export PYTHONPATH="${PYTHONPATH}:/home/user/myproject"或在 manage.py 开头添加(更可靠):
import sys import os sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
? 额外建议:
- 更规范的做法是将 seleniumtrack.py 移入 Django 项目内部(如作为独立 app:python manage.py startapp scraper),然后通过 from scraper.utils import scrape 导入,便于版本管理与依赖隔离;
- 避免在视图中直接调用耗时的爬虫逻辑(如 seleniumtrack.scrape(url)),应改用异步任务(Celery)或后台线程,防止请求阻塞;
- 检查 seleniumtrack.py 是否本身有未满足的依赖(如 selenium),可通过 pip install -r requirements.txt 统一安装。
完成上述配置后,重启开发服务器,ModuleNotFoundError: No module named 'seleniumtrack' 将不再出现,scrape() 函数即可正常调用。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










