2011-11-01 9 views
6

का उपयोग कर स्क्रिप्ट चलाने पर पाइथन MySQL मॉड्यूल आयात नहीं कर सकता है मैं एक पायथन स्क्रिप्ट चलाने के लिए crontab का उपयोग कर रहा हूं जिसके लिए मॉड्यूल MySQLdb की आवश्यकता होती है। जब मैं कमांड लाइन से इस स्क्रिप्ट को चलाता हूं तो सब कुछ ठीक काम करता है। हालांकि, क्रॉन्टाब का उपयोग करके इसे चलाने की कोशिश करने से यह त्रुटि निकलती है।crontab

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

मैं एक गूगल खोज किया था और मेरी स्क्रिप्ट #!/usr/bin/python के शीर्ष में जोड़ा है। हालांकि, यह कुछ भी नहीं किया और मुझे अभी भी एक ही त्रुटि मिल रही है। मैं क्या गलत कर रहा हूं?

उत्तर

12

ऐसा हो सकता है कि आप एक अलग पायथन निष्पादन योग्य का उपयोग कर रहे हों। खोल पर, पाइथन निष्पादन योग्य कहां स्थित है, यह जानने के लिए which python दर्ज करें। मान लीजिए कि इस /usr/bin/python के अलावा कुछ देता है, /home/myuser/bin/python कहते हैं, तो अपनी स्क्रिप्ट की पहली पंक्ति में, आपके द्वारा लिखी होगा:

#!/home/myuser/bin/python 

यह भी हो सकता है कि अपने खोल वातावरण चर PYTHONPATH आह्वान किया है।

import sys; sys.path.append('/path/to/MySQLdb-lib/') 
: अगर ऐसी बात है और आप पाते हैं कहाँ से पुस्तकालय का आयात कर रहा है, तो यह है कि कैसे आप पथ "MySQLdb" के आयात जोड़ना होगा से पहले अपनी स्क्रिप्ट की पहली पंक्ति में पुस्तकालय, को मिल रहा है
+1

आपको बहुत बहुत धन्यवाद! मैं कैसे पता लगा सकता हूं कि MySQLdb पथ का पथ क्या है? – Spencer

+1

इसे unutbu शो की तरह करें। अपने टर्मिनल में मॉड्यूल आयात करें जहां यह काम करता है और 'MySQLdb .__ file__' टाइप करें –

+0

बहुत उपयोगी, बहुत धन्यवाद। मेरे मामले में, सही समाधान था: cronjob बनाते समय हमेशा ABSOLUTE पथ को बिनरी का उपयोग करने का प्रयास करें। सादर –

6

अपने crontab के शीर्ष पर PythonPATH परिभाषित करें। इन सभी वातावरण चर को परिभाषित करना (नीचे) की मदद से आप कुछ सामान्य क्रॉन वातावरण चर की कमी से संबंधित समस्याओं से बचने कर सकते हैं:

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 

MySQLdb के लिए पथ जानने के लिए, एक अजगर खोल और प्रकार खोलें:

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

आपका मार्ग मेरा अलग है। उपर्युक्त उदाहरण में, PYTHONPATH में जोड़ने के लिए उचित डीआईआर /usr/lib/pymodules/python2.7 होगा (हालांकि आपको यह विशेष पथ जोड़ना नहीं चाहिए क्योंकि आपके अजगर निष्पादन योग्य के पास यह पथ स्वचालित रूप से sys.path में होना चाहिए)।

+0

आपको बहुत बहुत धन्यवाद!मैं कैसे पता लगा सकता हूं कि MySQLdb पथ का पथ क्या है? – Spencer

2

crontab अंदर PYTHONPATH को परिभाषित करना मेरे लिए काम किया, पहले मैं का उपयोग कर crontab दर्ज किया गया:

sudo crontab -e 

मैं तो PYTHONPATH चर करने के लिए पुस्तकालयों पथ गयी। मेरे मामले में यह इस था:

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

पुस्तकालय मैं पहली बार अजगर का उपयोग कर इसे आयातित और फिर फ़ाइल विशेषता का इस्तेमाल किया के रास्ते खोजने के लिए।

import library 
library.__file__ 
संबंधित मुद्दे