我写了一个运行正常的脚本,但是当我从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
但是它没有用,有什么建议吗?
感谢。
答案 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