当来自命令行的 运行 Python 脚本时,MySQLdb 模块工作,但不是作为 cron 作业

MySQLdb module works when running Python script from the command line, but not as a cron job

我正在尝试为 运行 我编写的 python 脚本创建一个 cron 作业,但由于某些原因,当我 运行 时,该脚本仅 运行s ] 从命令行中使用它。它以前有效,但我不小心删除了我的 crontab。当我刚写的 crontab 尝试 运行 它时,我得到一个关于 MySQLdb 模块是错误架构的错误:

    Traceback (most recent call last):
  File "/Users/myuser/Documents/EE_SFDC Integration/csv_reader/Weekly_Updates/Weekly_Confirmation/weekly_confirm.py", line 7, in <module>
    import MySQLdb
  File "/Library/Python/2.7/site-packages/MySQLdb/__init__.py", line 19, in <module>
    import _mysql
ImportError: dlopen(/Library/Python/2.7/site-packages/_mysql.so, 2): no suitable image found.  Did find:
    /Library/Python/2.7/site-packages/_mysql.so: mach-o, but wrong architecture

在我的 crontab 中,我尝试使用几个 python 版本(2.7 和 3.4)的完整路径,但我仍然遇到问题。当我使用 3.4 时,我没有收到关于 MySQLdb 的错误,但是我 do 收到关于 print .forma() 语句的错误语法错误。

但同样,当我从命令行 运行 脚本时不会发生这种情况,所以我预计这也不是正确的版本。

cron 作业如下所示:

14 12 * * * today=`date +"\%Y-\%m-\%d"` && /System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2 /Users/myuser/Documents/EE_SFDC\ Integration/csv_reader/Weekly_Updates/Weekly_Confirmation/weekly_confirm.py > /Users/myuser/Documents/EE/run_logs/weekly_sync_runlog_$today.txt 2>&1

非常感谢任何帮助!

该错误消息通常表示您的 MySQLdb(或依赖项)与 Python 体系结构不匹配。

也就是说,其中一个很可能是 64 位的,而另一个是 32 位的。

如果您在终端中尝试以下操作会怎样?

$ /System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2
(Take note of the exact version)
>>> import platform
>>> print platform.architecture()
>>> import MySQLdb

再做一次,但这次使用你路径中的 python,看看它们是否不同

$ python
>>> import platform
>>> print platform.architecture()
>>> import MySQLdb

编辑:

您还可以检查文件,模块是为什么架构构建的。

$ file /Library/Python/2.7/site-packages/_mysql.so
/Library/Python/2.7/site-packages/_mysql.so: Mach-O universal binary with 2 architectures
/Library/Python/2.7/site-packages/_mysql.so (for architecture x86_64):  Mach-O 64-bit bundle x86_64
/Library/Python/2.7/site-packages/_mysql.so (for architecture i386):    Mach-O bundle i386