2011-11-01 26 views
6

Tôi đang sử dụng crontab để chạy tập lệnh python yêu cầu mô-đun MySQLdb. Khi tôi chạy kịch bản này từ dòng lệnh, mọi thứ đều hoạt động tốt. Tuy nhiên, cố gắng chạy nó bằng cách sử dụng crontab elicits lỗi này.Không thể nhập mô-đun Python MySQL khi chạy tập lệnh bằng crontab

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

Tôi đã tìm kiếm trên google và thêm phần này vào đầu tập lệnh #!/usr/bin/python. Tuy nhiên, điều này đã không làm bất cứ điều gì và tôi vẫn nhận được cùng một lỗi. Tôi đang làm gì sai?

Trả lời

12

Có thể bạn đang sử dụng một tệp thực thi Python khác. Trên trình bao, nhập which python để tìm vị trí thực thi Python. Hãy nói điều này trả về một cái gì đó khác hơn /usr/bin/python, nói /home/myuser/bin/python, sau đó trong dòng đầu tiên của kịch bản của bạn, bạn sẽ viết:

#!/home/myuser/bin/python 

Nó cũng có thể là vỏ của bạn đã biến môi trường được gọi là PYTHONPATH. Nếu trường hợp đó xảy ra và bạn thấy nơi nhập thư viện, thì đây là cách bạn sẽ thêm đường dẫn để tìm thư viện trong dòng đầu tiên của tập lệnh, trước khi nhập nhập "MySQLdb":

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

cảm ơn bạn rất nhiều! Làm thế nào để tôi tìm ra đường dẫn đến đường dẫn MySQLdb là gì? – Spencer

+1

Làm như chương trình unutbu. 'import' module trong terminal của bạn, nơi nó hoạt động và gõ' MySQLdb .__ file__' –

+0

Rất hữu ích, cảm ơn rất nhiều. Trong trường hợp của tôi, giải pháp đúng là: hãy cố gắng luôn sử dụng TUYỆT ĐỐI TUYỆT ĐỐI VỚI NHÓM khi tạo một cronjob. Kính trọng –

6

Xác định PYTHONPATH ở đầu crontab của bạn. Xác định tất cả các biến môi trường (dưới đây) có thể giúp bạn tránh được một số vấn đề cron chung liên quan đến việc thiếu các biến môi trường:

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 

Để tìm hiểu đường dẫn đến MySQLdb, mở một shell python và gõ:

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

Đường dẫn của bạn khác. Trong ví dụ trên, thư mục thích hợp để thêm vào PYTHONPATH sẽ là /usr/lib/pymodules/python2.7 (mặc dù bạn không phải thêm đường dẫn cụ thể này vì tệp python của bạn có thể có đường dẫn này trong sys.path của nó tự động).

+0

cảm ơn bạn rất nhiều!Làm thế nào để tôi tìm ra đường dẫn đến đường dẫn MySQLdb là gì? – Spencer

2

Xác định PYTHONPATH bên trong crontab làm việc cho tôi, lần đầu tiên tôi bước vào crontab sử dụng:

sudo crontab -e 

sau đó tôi thêm vào con đường thư viện để biến PYTHONPATH. Trong trường hợp của tôi nó là thế này:

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

Để tìm ra con đường của thư viện đầu tiên tôi nhập khẩu nó sử dụng python và sau đó sử dụng các tập tin thuộc tính.

import library 
library.__file__ 
Các vấn đề liên quan