无法在crontab Mac OS中导入mysql-python

时间:2011-12-01 10:25:50

标签: python mysql macos crontab

我写了一个运行正常的脚本,但是当我从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尝试从当前目录(这是我的主文件夹)lopen(/Users/.../.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg-tmp/_mysql.so, 2)加载mysql-python,而库位于/Library/Python/2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg,我试图使用crontab中的PYTHONPATH=/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7但是它没有用,有什么建议吗?

感谢。

4 个答案:

答案 0 :(得分:2)

我使用以下解决方案解决了这个问题: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

答案 1 :(得分:0)

我认为你应该检查你的python版本。在Mac上,它可能安装了几个版本的python。例如2.5,2.6,2.7

当你在终端上运行时,你可能会使用python2.6,但对于cron作业,我使用的是2.7

使用python -V查看您使用的是哪个版本的python。

使用which python找到python路径

使用shell自动完成功能查看您安装了多少个pythons 当你键入python,然后按“tab”,你会找到结果。

答案 2 :(得分:0)

来自Mysqldb常见问题:http://mysql-python.sourceforge.net/FAQ.html

  

可能导致此问题的另一件事:MySQL库可能不在您的系统路径上。

     

解决方案:

     

设置LD_LIBRARY_PATH环境变量,使其包含MySQL库的路径。

     

在site.cfg中设置static = True以进行静态链接

这可能意味着在你的crontab中(记住最小的shell环境)mysql库是不可访问的(不在路径上,不在LD_LIBRARY_PATH中)

检查“常规”shell和“crontab”shell之间的环境变量

答案 3 :(得分:0)

尝试以下:

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib