python - ¿Cómo establecer virtualenv para un crontab?
virtualenvwrapper (3)
Con bash, puede crear un envoltorio de env virtual genérico que puede usar para invocar cualquier comando, al igual que el time
puede envolver cualquier comando.
virt_env_wrapper.bash
:
#!/bin/bash
source path/to/virtual/env/bin/activate
"$@"
El encantamiento mágico de Bash "$@"
re-escapa todos los tokens en la línea de comando original, de modo que si invocases:
virt_env_wrapper.bash python foo.py bar ''baz blap''
foo.py
vería un sys.argv
de [''bar'', ''baz blap'']
Quiero configurar un crontab para ejecutar un script de Python.
Digamos que el script es algo así como:
#!/usr/bin/python
print "hello world"
¿Hay alguna manera de que pueda especificar un virtualenv para ejecutar esa secuencia de comandos de Python? En el caparazón que acaba de hacer:
~$ workon myenv
¿Hay algo equivalente que pueda hacer en crontab para activar un virtualenv?
Otra solución que funciona bien para mí ...
0 9 * * * /path/to/virtenv/bin/python /path/to/cron_script.py
Prefiero usar Python directamente desde el virtualenv ...
Si está utilizando "workon", en realidad está usando "virtualenv wrapper", que es otra capa de abstracción que se sienta encima de virtualenv. virtualenv solo se puede activar al hacer una copia en el directorio raíz de virtualenv y ejecutar:
source bin/activate
workon es un comando provisto por virtualenv wrapper, no virtualenv, y hace algunas cosas adicionales que no son necesariamente necesarias para virtualenv simple. Todo lo que necesita hacer es generar el archivo bin / activate en su directorio raíz de virtualenv para "activar" un virtualenv.
Puede configurar su crontab para invocar un script 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