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

Django运行testapscheduler.py遇ModuleNotFoundError: No module named 'config'求助

解决ModuleNotFoundError: No module named 'config'问题

核心问题分析

你的代码中添加项目根目录到Python路径的操作时机错误,导致Django初始化时无法找到config模块;同时存在模型导入路径错误的问题。

具体修复步骤

1. 调整路径添加的位置

将sys.path.append移到导入Django之前,确保Django加载配置时能找到config模块:

import os
import sys
# 先把项目根目录加入Python搜索路径
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..'))

import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
django.setup()

2. 修正模型导入路径

从项目结构来看,Todo模型属于todo应用,因此导入语句需要改为:

from todo.models import Todo

3. 可选:用绝对路径增强稳定性

如果相对路径仍有问题,可以直接计算项目根目录的绝对路径添加:

current_script_dir = os.path.dirname(os.path.abspath(__file__))
# 假设脚本在项目根目录的子文件夹中,比如scripts
project_root_dir = os.path.dirname(current_script_dir)
sys.path.append(project_root_dir)

4. 规范运行方式

建议在项目根目录下运行脚本,避免路径混乱:

python scripts/testapscheduler.py  # 假设脚本放在scripts目录下

修复后的完整代码示例

import os
import sys
# 添加项目根目录到Python搜索路径
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..'))

import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
django.setup()

import logging
from todo.models import Todo
from apscheduler.schedulers.background import BackgroundScheduler, BlockingScheduler
from datetime import datetime, timedelta
import pytz
import requests
from django.conf import settings


def notify_todo():
    # 取得当前时间
    now = datetime.now(pytz.timezone('Asia/Tokyo'))

    # 获取截止时间在30分钟以内的TODO列表
    todos = Todo.objects.filter(
        deadline__gt=now - timedelta(minutes=30),
        deadline__lt=now + timedelta(minutes=30),
        ttime__isnull=False,
        ttime__gt=now.time()
    )

    # 输出30分钟以内的TODO列表数量
    logger = logging.getLogger('mylog')
    logger.setLevel(logging.DEBUG)
    sh = logging.StreamHandler()
    logger.addHandler(sh)
    logger.debug(f'{len(todos)}个TODO列表的截止时间在30分钟以内。')


    for todo in todos:
        # 获取LINE Notify的API令牌
        api_token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
        
        # 创建通知消息
        message = f"【{todo.title}】\n截止时间:{todo.deadline.strftime('%Y/%m/%d %H:%M')}\n详情:{todo.description}"

        # 发送通知到LINE Notify
        headers = {'Authorization': f'Bearer {api_token}'}
        payload = {'message': message}
        requests.post('https://notify-api.line.me/api/notify', headers=headers, data=payload)


scheduler = BlockingScheduler(timezone='Asia/Tokyo')
scheduler.add_job(notify_todo, 'interval', seconds=2) # 每2秒执行一次
scheduler.start()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:07:45