2011-11-01 25 views
6

Estoy usando crontab para ejecutar un script python que requiere el módulo MySQLdb. Cuando ejecuto este script desde la línea de comandos todo funciona bien. Sin embargo, intentar ejecutarlo usando crontab provoca este error.No se puede importar el módulo Python MySQL al ejecutar un script usando crontab

Traceback (most recent call last): 
    File "clickout.py", line 3, in <module> 
    import MySQLdb 
ImportError: No module named MySQLdb 

Hice una búsqueda en Google y añade esto a la parte superior de mi guión #!/usr/bin/python. Sin embargo, esto no hizo nada y todavía recibo el mismo error. ¿Qué estoy haciendo mal?

Respuesta

12

Es posible que esté utilizando un ejecutable de Python diferente. En el intérprete de comandos, ingrese which python para averiguar dónde se encuentra el ejecutable de Python. Digamos que esto devuelve algo distinto de /usr/bin/python, dicen /home/myuser/bin/python, a continuación, en la primera línea del script, podría escribir:

#!/home/myuser/bin/python 

También puede ser que el shell ha llamado variable de entorno PYTHONPATH. Si ese es el caso y encontrar donde está la importación de la biblioteca de, entonces esta es la forma en que agregaría el camino para encontrar la biblioteca en la primera línea del script, antes la importación de "MySQLdb":

import sys; sys.path.append('/path/to/MySQLdb-lib/') 
+1

muchas gracias! ¿Cómo averiguo cuál es la ruta de MySQLdb? – Spencer

+1

Hazlo como muestra unutbu. 'importe' el módulo en su terminal donde funciona y escriba' MySQLdb .__ file__' –

+0

Muy útil, muchas gracias. En mi caso, la solución correcta era: intente usar siempre la RUTA ABSOLUTA AL BINARIO al crear un cronjob. Saludos –

6

Defina PYTHONPATH en la parte superior de su crontab. Definición de todas estas variables de entorno (abajo) puede ayudar a evitar algunos problemas cron común relativos a la falta de variables de entorno:

USER=... 
HOME=/home/... 
SHELL=/bin/bash 
PATH=/sbin:/bin:/usr/sbin:/usr/bin:$HOME/bin 
PYTHONPATH=... 
DISPLAY=:0.0 
MAILTO=... 
LANG=en_US.UTF-8 

Para averiguar la ruta a MySQLdb, abra un shell Python y escriba:

>>> import MySQLdb 
>>> MySQLdb.__file__ 
'/usr/lib/pymodules/python2.7/MySQLdb/__init__.pyc' 

Tu ruta de trabajo difiero. En el ejemplo anterior, el directorio apropiado para agregar a PYTHONPATH sería /usr/lib/pymodules/python2.7 (aunque no debería tener que agregar esta ruta en particular ya que el ejecutable de python debería tener esta ruta en su sys.path automáticamente).

+0

muchas gracias!¿Cómo averiguo cuál es la ruta de MySQLdb? – Spencer

2

Definición de la PYTHONPATH dentro crontab trabajó para mí, primero entré crontab usando:

sudo crontab -e 

Luego añade la ruta de bibliotecas a la variable PYTHONPATH. En mi caso fue la siguiente:

PYTHONPATH=/home/username/.local/lib/python2.7/site-packages 

para encontrar el camino de la biblioteca me importó por primera vez que el uso de Python y luego se usa el archivo atributo.

import library 
library.__file__ 
Cuestiones relacionadas