Не удается импортировать модуль Python MySQL при запуске сценария с использованием crontab - PullRequest
9 голосов
/ 01 ноября 2011

Я использую crontab для запуска скрипта на python, для которого требуется модуль MySQLdb.Когда я запускаю этот скрипт из командной строки, все работает нормально.Однако попытка запустить его с помощью crontab вызывает эту ошибку.

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

Я сделал поиск в Google и добавил это в начало моего скрипта #!/usr/bin/python.Однако, это ничего не сделало, и я все еще получаю ту же ошибку.Что я делаю неправильно?

Ответы [ 5 ]

13 голосов
/ 01 ноября 2011

Возможно, вы используете другой исполняемый файл Python. В командной строке введите which python, чтобы узнать, где находится исполняемый файл Python. Допустим, это возвращает что-то отличное от /usr/bin/python, скажем /home/myuser/bin/python, тогда в первой строке вашего скрипта вы напишите:

#!/home/myuser/bin/python

Также может быть, что в вашей оболочке есть переменная окружения с именем PYTHONPATH. Если дело обстоит именно так, и вы обнаружите, откуда она импортирует библиотеку, то вы добавите путь для поиска библиотеки в первой строке вашего скрипта, за до импорта "MySQLdb":

import sys; sys.path.append('/path/to/MySQLdb-lib/')
6 голосов
/ 01 ноября 2011

Определите PYTHONPATH вверху вашего crontab.Определение всех этих переменных среды (ниже) может помочь вам избежать некоторых распространенных проблем 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 и введите:

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

Твой путь мой отличается.В приведенном выше примере соответствующий dir для добавления в PYTHONPATH будет /usr/lib/pymodules/python2.7 (хотя вам не нужно добавлять этот конкретный путь, поскольку исполняемый файл python должен автоматически иметь этот путь в sys.path).

3 голосов
/ 08 июля 2016

Определение PYTHONPATH внутри crontab сработало для меня, сначала я ввел crontab, используя:

sudo crontab -e

Затем я добавил путь к библиотекам в переменную PYTHONPATH.В моем случае это было так:

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

Чтобы найти путь к библиотеке, я сначала импортировал ее с помощью python, а затем использовал атрибут file .

import library
library.__file__
0 голосов
/ 12 апреля 2019

Попробуйте запустить

sudo -H pip install MySQLdb

(обратите внимание на параметр -H).У меня схожая проблема с другим пакетом

0 голосов
/ 01 ноября 2011

Проблема в том, что этот модуль не находится в пути поиска модуля python пользователя crontab.Попробуйте посмотреть здесь: http://docs.python.org/tutorial/modules.html#the-module-search-path

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...