2011-11-01 22 views
6

私はcrontabを使用してモジュールMySQLdbを必要とするpythonスクリプトを実行しています。コマンドラインからこのスクリプトを実行すると、すべて正常に動作します。ただし、crontabを使用して実行しようとすると、このエラーが発生します。crontabを使用してスクリプトを実行しているときにPythonのMySQLモジュールをインポートできない

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

私は、Google検索を行なったし、私のスクリプト#!/usr/bin/pythonの先頭にこれを追加しました。しかし、これは何もしなかったし、私はまだ同じエラーが発生しています。私は間違って何をしていますか?

答えて

12

異なるPython実行ファイルを使用している可能性があります。シェルで、which pythonと入力して、Python実行可能ファイルの場所を確認します。のは、これが/usr/bin/python以外の何かを返すとしましょう、そして、あなたのスクリプトの1行目に、あなたが書くと、/home/myuser/bin/pythonを言う:

#!/home/myuser/bin/python 

それはまたあなたのシェルがPYTHONPATHという環境変数を持っている可能性があります。それはケースだと、それはからライブラリをインポートしています場所を見つけた場合、これはあなたが「のMySQLdb」の前に輸入、スクリプトの最初の行でライブラリを見つけるために、パスを追加する方法を次のとおりです。

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

ありがとうございました! MySQLdbのパスへのパスを知るにはどうすればよいですか? – Spencer

+1

unutbuショーが好きですか? 'import'モジュールが動作している端末で' mysqldb .__ file__'と入力してください。 –

+0

非常に役に立ち、多くの感謝です。私の場合、適切な解決策は:クローンジョブを作成するときに常に絶対パスをバイナリに使用するようにしてください。よろしくお願いします。 –

6

crontabの上部にPYTHONPATHを定義します。 Pythonシェルと種類を開く、のMySQLdbへのパスを見つけるには

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 

: は(下記)は、すべてのこれらの環境変数を定義すると、環境変数の欠如に関連したいくつかの共通のcronの問題を回避することができます:

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

あなたのパスは違います。上記の例では、PYTHONPATHに追加する適切なディレクトリは/usr/lib/pymodules/python2.7です(この特定のパスを追加する必要はありませんが、Python実行可能ファイルはsys.path内にこのパスを自動的に持つ必要があります)。 crontabの内部でPYTHONPATHを定義

+0

ありがとうございます!MySQLdbのパスへのパスを知るにはどうすればよいですか? – Spencer

2

が私のために働いた、最初に私が使用してのcrontabに入った:

sudo crontab -e 

私はその後、PYTHONPATH変数にライブラリのパスを追加しました。私は最初のpythonを使用して、それをインポートして、ファイル属性を使用するライブラリのパスを見つけるには

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

:私のケースでは、このでした。

import library 
library.__file__ 
関連する問題