Python中windows计划任务执行脚本时,无法导入同级目录模块怎么办?
6 回复
把你的父级目录动态加入到 sys.path 中
建议 from api import xxxx
这个问题很常见,是因为Windows任务计划程序的工作目录(Current Directory)和你开发时不一样,导致Python的模块导入路径(sys.path)里没有你的脚本目录。
核心原因:任务计划程序默认的工作目录通常是 System32 或其它系统目录,不是你的脚本所在目录。Python导入同级模块时,依赖当前目录在 sys.path 中。
解决方案:在脚本开头,动态地将脚本所在的目录添加到Python的模块搜索路径中。这是最可靠的方法。
具体代码: 在你的主执行脚本(也就是被任务计划调用的那个.py文件)的最开头,添加以下代码:
import os
import sys
# 获取当前脚本文件的绝对路径
script_path = os.path.abspath(__file__)
# 获取脚本所在的目录
script_dir = os.path.dirname(script_path)
# 将该目录添加到sys.path的最前面,确保优先搜索
if script_dir not in sys.path:
sys.path.insert(0, script_dir)
# 现在可以安全导入同级目录的模块了
# 例如:import your_module
# from your_package import something
解释:
__file__变量包含了当前脚本的文件名。通过os.path.abspath()和os.path.dirname()我们能准确得到它所在的目录,无论这个脚本从哪里被调用。sys.path是一个列表,Python解释器按顺序在这里面查找要导入的模块。sys.path.insert(0, script_dir)将你的脚本目录插入到列表开头,让它成为第一个被搜索的位置。这样,Python就能找到和你主脚本在同一文件夹下的其他.py文件(模块)或子包了。
举个例子:
假设你的项目结构如下,并且 main_task.py 被任务计划调用:
D:/my_project/
├── main_task.py (你的主脚本,添加了上面的路径修复代码)
├── utils.py (一个同级工具模块)
└── config/
└── settings.py (一个子目录下的模块)
在 main_task.py 开头添加了上述代码后,你就可以直接:
import utils
from config import settings
任务计划执行时就不会再报 ModuleNotFoundError 了。
一句话总结:在脚本开头用 sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) 把脚本所在目录加入模块搜索路径。
当前目录的问题?
调用文件的路径问题,sys.path.append 试下
我也估计是当前目录的问题
谢谢你们,还有所有人,问题解决了,就是把目录加到 sys.path 再 import 就可以了。

