想在mac下做django的开发,原来用gae做了会,发现实在太折腾。直接来django吧,结果在安装mysql的时候,活活折腾我两天。结果终于被我折腾成功了……
一开始我就放了个错误:我下了32位版本的mysql:mysql-5.5.8-osx10.6-x86.dmg
须知在mac下装的是64位的python,所以后面我安装mysql的python驱动Mysql-python,一直出错:
importError dlopen(..../..../_mysql.so,2)
注:安装mysql-python的时候,出现找不到mysql_config的错误,可以照网上的方法去修改安装文件,最好的方式是把mysql的bin文件夹添加到环境变量中。
之类的……和下面提到的错误很像,不知道是不是一样的,窗口被我关了,以不可考……不过官方的FAQ.txt有提到这种错误,说是gcc的版本不一样,可能过旧之类的。后来查看一些网页得知,原来mac用的是64位的python,所以要用64位的mysql……
所以卸载之。结果发现mysql的dmg包里还没卸载工具……郁闷的于是在网上搜到了卸载mysql的方法,原来得手动删除。
网上很多文章记述的方法中,删除的不干净,丢了一个地方。我在stackflow上查到,于是写出来,供大家查阅。http://hearrain.com/2011/01/495
换了64位安装包,原来应该没什么问题的,结果还是出现原来这样类似的错误。
于是就索性转用homebrew来安装。
结果homebrew安装的mysql,在python下import没问题,不过却不能初始化数据库……在homebrew官网问了,却一直没有方法解决……(真不知道是不是我人品问题)
homebrew下装的mysql是classic版mysql-5.1.54,我怀疑是版本问题,就转向官网下mysql-5.1.54二进制包
结果数据库能初始化,不过python下import MySQLdb却出现下面错误
>>> import MySQLdb
Traceback (most recent call last):
File "", line 1, in
File "MySQLdb/__init__.py", line 19, in
import _mysql
ImportError: dlopen(/usr/local/Cellar/python/2.7.1/lib/python2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.4-x86_64.egg/_mysql.so, 2): Library not loaded: /usr/local/Cellar/mysql/5.1.54/lib/mysql/libmysqlclient_r.16.dylib
Referenced from: /usr/local/Cellar/python/2.7.1/lib/python2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.4-x86_64.egg/_mysql.so
Reason: image not found
在我被折腾的死去活来的时候,我觉得好好研究一下错误代码。
错误中提到libmysqlclient_r.16.dylib不能载入,不过在mysql的lib里libmysqlclient_r.16.dylib在的啊。
结果在stackoverflow上提到了校验libmysqlclient_r.16.dylib的文件问题,所以我就坚定了这部分有问题。
不过我在这篇文章(这篇文章应该也是stackoverflow上的)中发现了问题真正原因:mysql-python的build问题。
这篇文章中,仔细让我们校验了mysql/lib里的libmysqlclient_r.16.dylib和python2.7/site-packages里的_mysql.so。
通过otool -L _mysql.so 分析发现,原来_mysql.so依然链接的是homebrew安装mysql时libmysqlclient_r.16.dylib的位置……因为mysql-python在install时build,保留了旧的位置,所以需要重新build,最好是删掉,重新解压来安装。
所以我想大概前面装64位时,python下import不成功的原因就是mysql-python在install的时候保留了旧的位置……哎……没文化真是害死人。
重新解压mysql-python,install,测试成功。
总结:
1、mac下预装的python是64位的,所以一定要用64位的mysql。安装方法:http://hearrain.com/2011/01/498
2、mac下用DMG格式的mysql安装的话,卸载很麻烦。卸载方法:http://hearrain.com/2011/01/495
3、安装好mysql或是其他软件,得记得设环境变量。mac下修改环境变量的方法http://hearrain.com/2011/01/490中有提到。
4、用setuptools重新安装python组件时,记得重新build,或者重新解压。
5、仔细分析错误代码,追踪错误源头,善于在stackoverflow上找答案。stackoverflow真是一个相当赞的技术问答社区。quora这样的社区有点闹了。技术社区应该很垂直,很干脆,社交元素神马的都是浮云。