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

Spe*_*cer 10 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
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*uri 15

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

#!/home/myuser/bin/python
Run Code Online (Sandbox Code Playgroud)

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

import sys; sys.path.append('/path/to/MySQLdb-lib/')
Run Code Online (Sandbox Code Playgroud)

  • 像 unutbu 节目那样做。`import` 终端中的模块,然后输入`MySQLdb.__file__` (2认同)

unu*_*tbu 7

在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
Run Code Online (Sandbox Code Playgroud)

要找到MySQLdb的路径,打开python shell并输入:

>>> import MySQLdb
>>> MySQLdb.__file__
'/usr/lib/pymodules/python2.7/MySQLdb/__init__.pyc'
Run Code Online (Sandbox Code Playgroud)

你的道路我的不同.在上面的例子中,要添加的相应dir PYTHONPATH/usr/lib/pymodules/python2.7(尽管你不应该添加这个特定的路径,因为你的python可执行文件应该自动在它的sys.path中有这个路径).