Python 通过 windows 调度程序执行时出现 ImportError

Python ImportError when executing through windows scheduler

我对该主题进行了一些搜索并找到了一些先前的线程,但我不理解其中的任何一个,因为我仍然是 Python 的初学者。

我有一个 Python 脚本,其中有一些长字符串变量存储在子目录中的各种 .py 文件中。当我 运行 脚本时,我正在从该子目录导入 .py 文件。子目录中有一个 __init__.py 文件。我使用此设置的唯一原因是我存储在那些其他文件中的长字符串变量会使代码很难阅读,因为它们是 SQL 字符串并且每个可以跨越 50-100 行。

当我 运行 这个脚本通过 PyCharm 时一切正常。

但是,当我通过 Windows 调度程序或批处理文件 运行 脚本时,我得到了子目录中所有 .py 文件的 ImportError。问题肯定与 python 脚本有关,当它通过 Windows 调度程序 运行 时,它不知道在哪里寻找那些 .py 文件。但我不确定如何修复它。

调度程序任务的操作是 运行 python exe

D:\Python35\python.exe

以参数为脚本

D:\python\tableaudatasourcebuilds\dcitechnicalperformance\dcitechnicalperformance0.py

所以完整的动作看起来像:

D:\Python35\python.exe "D:\python\tableaudatasourcebuilds\dcitechnicalperformance\dcitechnicalperformance0.py"

存放长字符串变量.py文件的子目录为:

D:\python\tableaudatasourcebuilds\dcitechnicalperformance\dcitechnicalperformance0\

导入看起来像:

from dcitechnicalperformance.dcitechnicalperformance0.dciquer import nzsqldciwk

有谁知道如何解决这个问题?非常感谢任何帮助。

下午好,

首先,我不知道在模块上存储长 SQL 查询有多大意义,我无论如何都不是专家,但有点像 JSON 文件(或者地狱,甚至将它们存储在 sql 内的 table 中)似乎是更好的方法。

关于你的问题我认为是在当前启动任务的目录下,我来解释一下:

  • 在 PyCharm 中,当您 运行 代码时,它会从文件 的位置启动 ,这样,它就可以找到目录模块。
  • 计划任务可能会在另一个目录中启动,因此无法找到模块,因为该目录不存在。

如果您决定坚持指责,一个合理的解决方案是创建一个浏览到项目位置的 .bat 文件:

@ECHO OFF 
D:
cd D:\python\tableaudatasourcebuilds\dcitechnicalperformance\
D:\Python35\python.exe dcitechnicalperformance0.py

这应该有效。