Не удается импортировать mysql-python в crontab Mac OS - PullRequest
2 голосов
/ 01 декабря 2011

Я написал скрипт, который работает нормально, но когда я запускаю его из crontab, я получаю ошибку импорта.

   Traceback (most recent call last):
  File "/Users/.../Desktop/test.py", line 3, in <module>
    import MySQLdb as mysql
  File "build/bdist.macosx-10.7-intel/egg/MySQLdb/__init__.py", line 19, in <module>
  File "build/bdist.macosx-10.7-intel/egg/_mysql.py", line 7, in <module>
  File "build/bdist.macosx-10.7-intel/egg/_mysql.py", line 6, in __bootstrap__
ImportError: dlopen(/Users/.../.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Users/.../.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg-tmp/_mysql.so
  Reason: image not found

Я пытался добавить это #!/usr/bin/python в начало моего скрипта, но проблема все еще там.

Я работаю на Mac OS версии 10.7

Редактировать: Crontab пытается загрузить mysql-python из текущего каталога (который является моей домашней папкой) lopen(/Users/.../.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg-tmp/_mysql.so, 2), в то время как библиотека находится в /Library/Python/2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg, я пытался использовать PYTHONPATH=/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7 в crontab но это не работает, любое предложение?

Спасибо.

Ответы [ 4 ]

2 голосов
/ 11 июля 2013

Я решил это, используя следующее решение из: https://unix.stackexchange.com/questions/27289/how-can-i-run-a-cron-command-with-existing-environmental-variables

В моем случае это было потому, что у Cron не было доступа к моим переменным окружения, которые указывают на правильное место библиотеки Mysql.

Я использовал:

8 10 * * * . $HOME/.bash_profile; /Path/To/Script/pythonDbScript.py
0 голосов
/ 02 декабря 2011

Из часто задаваемых вопросов Mysqldb: http://mysql -python.sourceforge.net / FAQ.html

Еще одна причина, которая может вызвать это: библиотеки MySQL могут быть не включеныВаш системный путь.

Решения:

установите переменную среды LD_LIBRARY_PATH, чтобы она включала путь к библиотекам MySQL.

set static = True в site.cfg для статическогоlinking

Это, вероятно, означает, что в вашем crontab (вспомните минимальное окружение оболочки) библиотеки mysql недоступны (не по пути, не в LD_LIBRARY_PATH)

проверьте переменные средымежду «обычной» оболочкой и оболочкой «crontab»

0 голосов
/ 04 февраля 2012

попробуйте ниже:

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib
0 голосов
/ 01 декабря 2011

Я думаю, вам стоит проверить версию своего питона.На Mac может быть установлено несколько версий Python.например, 2.5, 2.6, 2.7

Когда вы работаете на терминале, вы можете использовать python2.6, но для задания cron я могу использовать 2.7

и использовать python -V, чтобы увидеть, какая версияPython вы используете.

используйте which python, чтобы найти путь к Python

используйте автозаполнение оболочки, чтобы увидеть, сколько питонов вы установили при вводе Python, затем нажмите «Tab», вынайдет результат.

...