使用crontab运行脚本时无法导入Python MySQL模块

时间:2011-11-01 18:15:43

标签: python shell cron mysql-python

我使用crontab运行需要模块MySQLdb的python脚本。当我从命令行运行此脚本时,一切正常。但是,尝试使用crontab运行它会引发此错误。

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

我进行了谷歌搜索并将其添加到我的脚本#!/usr/bin/python的顶部。但是,这没有做任何事情,我仍然得到同样的错误。我究竟做错了什么?

5 个答案:

答案 0 :(得分:13)

可能是您正在使用不同的Python可执行文件。在shell上,输入which python以找出Python可执行文件的位置。假设这会返回/usr/bin/python之外的其他内容,比如说/home/myuser/bin/python,然后在脚本的第一行,你会写:

#!/home/myuser/bin/python

也可能是您的shell具有名为PYTHONPATH的环境变量。如果是这种情况,并且您找到了从中导入库的位置,那么您将在脚本的第一行添加路径以查找库,在导入“MySQLdb”之前

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

答案 1 :(得分:6)

在crontab的顶部定义PYTHONPATH。 定义所有这些环境变量(如下所示)可以帮助您避免与缺少环境变量相关的一些常见cron问题:

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的路径,请打开python shell并输入:

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

你的道路我的不同。在上面的示例中,添加到PYTHONPATH的相应目录将是/usr/lib/pymodules/python2.7(尽管您不必添加此特定路径,因为您的python可执行文件应在其sys.path中自动具有此路径)。

答案 2 :(得分:3)

在crontab中定义PYTHONPATH对我有用,首先我使用以下命令进入crontab:

sudo crontab -e

然后我将库路径添加到PYTHONPATH变量中。就我而言,就是这样:

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

要查找库的路径,我首先使用python导入它,然后使用文件属性。

import library
library.__file__

答案 3 :(得分:0)

尝试运行

sudo -H pip install MySQLdb

(请注意-H选项)。它对我有用,另一个软件包也有类似问题

答案 4 :(得分:-1)

问题是该模块不在crontab用户的python模块搜索路径中。 试着看这里:http://docs.python.org/tutorial/modules.html#the-module-search-path