使用 Windows 任务计划程序安排 [Virtualenv 依赖] Python 脚本

使用 Windows 任务计划程序安排 [Virtualenv 依赖] Python 脚本

我想安排一个 Python 脚本在每个工作日的凌晨 3 点开始运行,下午 5 点停止运行。然而,当我需要启动 virtualenv 时,问题出现了,因为所有软件包都安装在虚拟环境中。

我可以让脚本在特定时间运行,但无法激活虚拟环境(我通常会输入“ env\scripts\activate”)。以下是我的操作:

在此处输入图片描述

我该如何激活虚拟环境以及我应该采取什么操作来破坏脚本?

答案1

我的 workon.bat 脚本无法正确设置 Env 属性,但这个最终命令在任务计划程序中起作用:

cmd /C c:/Users/name/Env/workon_name/Scripts/activate.bat & python run_script.py

答案2

您创建一个 Windows 批处理文件,例如 MyProgram.bat,其内容如下:

cd C:\PathToYourPythonFile
call C:\PathToYourCondaInstallation\Scripts\activate.bat YourEnv
python YourPythonFile.py

确保YourEnv用之前设置的 conda 环境进行替换。

您可以从任务计划程序启动批处理文件,无需任何额外的参数。

添加在:

或者,为了避免弹出窗口,我让任务计划程序调用一个三行的 MyProgram.vbs 文件,该文件调用上述批处理文件,如下所示:

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\PathToYourBatchFile\MyProgram.bat" & Chr(34), 0
Set WshShell = Nothing

总是有三个文件有点尴尬(Windows 上你还能指望什么……)但我对文件使用相同的名称,所以没问题。我很高兴听到更好的解决方案。

答案3

如果你创建一个批处理文件,例如test.bat,首先激活你的虚拟环境,然后运行你的 Python 脚本,结果会怎样?例如:

env\scripts\activate
D:\Python\Aldabra\env\Scripts\python.exe "D:\Python_scpt\test.py"

然后从 Windows 任务计划程序运行该脚本。

在您的脚本中,我还建议使该env\scripts\activate部分不依赖于脚本的运行位置。即使其为绝对路径。

答案4

当您直接调用python.exe虚拟环境中的文件时,您实际上是间接激活了virtualenvironment

当您输入 时.\env\Scripts\activate,您只是在更改路径变量,这样包含虚拟环境中安装的库的目录路径Lib将首先出现。因此,当 python 搜索这些库时,它会首先在虚拟环境中找到这些库并使用它们。

如果你没有其他限制,那么只需使用 C:\path_to_virtualenvip\python.exe C:\path_to_python_file.py

应该足以在你的虚拟环境中运行 python 文件。

相关内容