¿Cómo configurar virtualenv para un crontab?

Quiero configurar un crontab para ejecutar un script de Python.

Decir que el guión es algo como:

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

¿Hay alguna manera de que pueda especificar un virtualenv para que se ejecute ese script de Python? En la shell que acabo de hacer:

 ~$ workon myenv 

¿Hay algo equivalente que podría hacer en crontab para activar un virtualenv?

Si está utilizando “workon”, en realidad está utilizando “virtualenv wrapper”, que es otra capa de abstracción que se encuentra sobre virtualenv. solo se puede activar virtualenv mediante el cd’ing a su directorio raíz virtualenv y ejecutando:

 source bin/activate 

workon es un comando proporcionado por virtualenv wrapper, no virtualenv, y hace algunas cosas adicionales que no son necesariamente necesarias para virtualenv simple. Todo lo que realmente necesita hacer es obtener el archivo bin / activar en su directorio raíz virtualenv para “activar” un virtualenv.

Puede configurar su crontab para invocar un script de bash que hace esto:

 #! /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 

Otra solución que me funciona bien …

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

Prefiero usar python directamente desde el virtualenv …

Con bash, puede crear una envoltura de env virtual virtual que puede usar para invocar cualquier comando, de manera similar a como el time puede envolver cualquier comando.

virt_env_wrapper.bash :

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

El conjuro mágico de Bash "$@" vuelve a escapar de todos los tokens en la línea de comando original, de modo que si invocas:

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

foo.py vería un sys.argv de ['bar', 'baz blap']