2011-11-01 5 views
6

Sto usando crontab per eseguire uno script python che richiede il modulo MySQLdb. Quando eseguo questo script dalla riga di comando, tutto funziona correttamente. Tuttavia, provare ad eseguirlo usando crontab suscita questo errore.Impossibile importare il modulo MySQL Python quando si esegue uno script usando crontab

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

Ho fatto una ricerca su Google e ha aggiunto questo alla parte superiore del mio script #!/usr/bin/python. Tuttavia, questo non ha fatto nulla e sto ancora ricevendo lo stesso errore. Che cosa sto facendo di sbagliato?

risposta

12

È possibile che tu stia utilizzando un diverso eseguibile Python. Sulla shell, immettere which python per scoprire dove si trova l'eseguibile Python. Diciamo che restituisce qualcosa di diverso /usr/bin/python, dicono /home/myuser/bin/python, poi nella prima riga dello script, si può scrivere:

#!/home/myuser/bin/python 

Può anche essere che la shell è variabile d'ambiente chiamata PYTHONPATH. Se questo è il caso e si trovano dove è importare la libreria da, allora questo è come si potrebbe aggiungere il percorso per trovare la libreria nella prima riga dello script, prima l'importazione di "MySQLdb":

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

grazie mille! Come posso scoprire qual è il percorso del percorso MySQLdb? – Spencer

+1

Fai come gli spettacoli di unutbu. 'importa' il modulo nel tuo terminale dove funziona e digita' MySQLdb .__ file__' –

+0

Molto utile, molte grazie. Nel mio caso, la soluzione giusta era: provare ad usare sempre il PERCORSO ASSOLUTO AL BINARIO quando si crea un cronjob. Saluti –

6

Definisci PYTHONPATH nella parte superiore di crontab. definizione di tutte queste variabili d'ambiente (sotto) può aiutare a evitare alcuni problemi comuni cron relativi alla mancanza di variabili d'ambiente:

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 

Per scoprire il percorso di MySQLdb, aprire una shell Python e tipo:

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

Il percorso è diverso. Nell'esempio sopra, la directory appropriata da aggiungere a PYTHONPATH sarebbe /usr/lib/pymodules/python2.7 (anche se non dovresti aggiungere questo percorso particolare poiché il tuo eseguibile python dovrebbe avere automaticamente questo percorso nel suo percorso sys.path).

+0

grazie mille!Come posso scoprire qual è il percorso del percorso MySQLdb? – Spencer

2

Definizione del PYTHONPATH all'interno crontab lavorato per me, prima ho inserito crontab utilizzando:

sudo crontab -e 

Ho poi aggiunto il percorso librerie alla variabile PYTHONPATH. Nel mio caso è stato questo:

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

per trovare il percorso della biblioteca ho importato utilizzando Python e quindi utilizzato il file attributi .

import library 
library.__file__