MySQLdb模块在从命令行运行Python脚本时工作,但不是作为cron作业
我试图创建一个cron作业来运行我编写的python脚本,但由于某些原因,该脚本只在我从命令行运行时运行。它以前工作过,但我不小心删除了我的crontab。当我刚刚编写的crontab试图运行它时,我得到一个错误,即MySQLdb模块是错误的体系结构:MySQLdb模块在从命令行运行Python脚本时工作,但不是作为cron作业,python,cron,mysql-python,Python,Cron,Mysql Python,我试图创建一个cron作业来运行我编写的python脚本,但由于某些原因,该脚本只在我从命令行运行时运行。它以前工作过,但我不小心删除了我的crontab。当我刚刚编写的crontab试图运行它时,我得到一个错误,即MySQLdb模块是错误的体系结构: Traceback (most recent call last): File "/Users/myuser/Documents/EE_SFDC Integration/csv_reader/Weekly_Updates/Weekly
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
非常感谢您的帮助 错误消息通常意味着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
错误消息通常表示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
非常感谢。当我尝试以您建议的第一种方式导入MySQLdb时,我看到了一个错误
/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2
,而不是从我的路径运行Python。考虑到这一点,我如何在cronjob中找出Python的哪个版本(以及要使用的文件路径)?另外,通过/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2
运行Python,然后运行print platform.architecture()
返回('64位','')
,当我尝试导入MySQLdb时抛出了一个错误,而当我从PATH运行时,返回了('32bit','')
,它在导入时没有抛出错误,因此我需要运行32位版本的Python。我想我找到了答案。。。arch-i386/usr/bin/python
听起来正确吗?谢谢!当我尝试以您建议的第一种方式导入MySQLdb时,我看到了一个错误/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2
,而不是从我的路径运行Python。考虑到这一点,我如何在cronjob中找出Python的哪个版本(以及要使用的文件路径)?另外,通过/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2
运行Python,然后运行print platform.architecture()
返回('64位','')
,当我尝试导入MySQLdb时抛出了一个错误,而当我从PATH运行时,返回了('32bit','')
,它在导入时没有抛出错误,因此我需要运行32位版本的Python。我想我找到了答案。。。arch-i386/usr/bin/python
听起来正确吗?