激活 virtualenv 并从 .bat 运行 .py 脚本

问题描述 投票:0回答:8

我想使用 Windows 任务计划程序在虚拟环境中运行 python 脚本。我希望调度程序运行一个 .bat 文件,它将

  1. 激活虚拟环境
  2. 运行脚本

这些步骤从命令行一起工作,并且它们在 .bat 中单独工作,但我似乎无法让它们从 .bat 一起工作。当我尝试执行 python 脚本时,virtualenv 似乎没有完全激活,并且不知道为什么。

我的.bat 看起来像这样:

call workon venv
cd path/to/Python/proj
python -m script.py

我尝试在调用

workon
后立即添加超时,并尝试将
workon
移动到与我的第一个文件调用的单独 .bat 中,但其他行仍在激活 virtualenv 之前执行。非常感谢任何帮助!

python batch-file cmd virtualenv
8个回答
65
投票

在.bat中运行时不需要激活虚拟环境。您需要做的就是在虚拟环境中运行 python.exe 文件。

{path to virtual environment directory}/Scripts/python.exe path/to/your/file.py

在 Windows 任务计划程序中,您可以指定命令提示符打开的路径。因此,您需要做的就是在添加操作时,在

Program/script
字段中使用 Python 的路径,在
Add arguments
字段中使用要运行的文件的名称,以及
file.py
中的
Start in
的路径领域。

P.S 如果您在 python 文件中读取或写入文件,请注意您的路径将相对于您在操作窗口

start in
字段中指定的路径


30
投票

您可以在 oneliner 批处理文件中使用 & 符号

&
运算符。

call workon venv & cd path/to/Python/proj & python -m script.py

它将依次运行每个命令。

您还可以将 & 符号加倍,使其成为条件运算符。

&&

call workon venv && cd path/to/Python/proj && python -m script.py

这里的命令仅在前一个命令成功完成的情况下才会运行,换句话说

ERRORLEVEL = 0


10
投票

只需输入

call .\venv\Scripts\activate.bat

在 .bat 文件中以及之后的任何命令都会看到 venv 被激活

记录一下 cmd 中的

call
暂停当前脚本的执行,执行被调用的脚本,然后恢复。


1
投票

你的操作系统必须是linux或mac,因为你的路径是“path/to/Python/proj”

在窗口中,它是“path o\Python\proj”

在我的窗口机器中,下面的脚本可以工作

call "venv\scripts\activate"
cd ur_path
py script.py

0
投票

执行此操作的另一种方法是创建批处理文件的快捷方式,然后更改“开始于”字段。 之后,请记住在批处理文件中使用完整路径,因为它将从不同的位置运行。


0
投票

在批处理文件中,使用虚拟环境的 python 路径启动 python 脚本。即

 start C:\mypythonproject\Scripts\python C:\mypythonroject\getcoindata.py

在任务计划程序中,只需将批处理文件安排为常规文件即可。


-1
投票

创建.bat文件

编写虚拟环境激活脚本位置和Python文件位置如下,使用“&”运算符运行两个命令。

如下:

"E:\Call Allocation Engine\Development\development_env\Scripts\"activate & python run.py

https://i.stack.imgur.com/31Gkh.png

最后将此文件放在所需的文件夹中并使用cmd运行。

E:\Call Allocation Engine\Development\Optimisation\Scheduling>file_name.bat

此脚本将激活虚拟环境并在该环境中运行您的Python代码。


-3
投票

编辑

activate.bat
并将此行放在底部:

python yourscript.py

安排

activate.bat
本身,它会在虚拟环境激活后自动运行您的脚本。

© www.soinside.com 2019 - 2024. All rights reserved.