如何为crontab设置virtualenv?

时间:2010-11-11 01:22:27

标签: python cron virtualenv virtualenvwrapper

我想设置一个crontab来运行Python脚本。

说脚本是这样的:

#!/usr/bin/python
print "hello world"

有没有办法为这个Python脚本指定一个virtualenv来运行?在shell中,我只是这样做:

~$ workon myenv

我在crontab中可以做些什么来激活virtualenv吗?

3 个答案:

答案 0 :(得分:93)

另一种适合我的解决方案......

0    9    *    *    *    /path/to/virtenv/bin/python /path/to/cron_script.py

我更喜欢直接使用virtualenv中的python ...

答案 1 :(得分:78)

如果您正在使用“workon”,那么您实际上正在使用“virtualenv wrapper”,这是另一层位于virtualenv之上的抽象层。单独使用virtualenv可以通过cd到你的virtualenv根目录并运行:

来激活
source bin/activate

workon是由virtualenv包装器提供的命令,而不是virtualenv,它还做了一些额外的东西,这些东西对于简单的virtualenv来说不是必需的。您真正需要做的就是在virtualenv根目录中获取bin / activate文件以“激活”virtualenv。

您可以设置crontab来调用执行此操作的bash脚本:

#! /bin/bash    
cd my/virtual/env/root/dir
source bin/activate

# virtualenv is now active, which means your PATH has been modified.
# Don't try to run python from /usr/bin/python, just run "python" and
# let the PATH figure out which version to run (based on what your
# virtualenv has configured).

python myScript.py

答案 2 :(得分:8)

使用bash,您可以创建一个通用的虚拟环境包装器,您可以使用它来调用 任何 命令,就像time如何包装任何命令一样。

virt_env_wrapper.bash

#!/bin/bash    
source path/to/virtual/env/bin/activate
"$@"

Bash的魔法咒语"$@"重新转义原始命令行上的所有令牌,以便在您调用时使用:

virt_env_wrapper.bash python foo.py bar 'baz blap'

foo.py会看到sys.argv ['bar', 'baz blap']