Contents

花了好几个小时解决了一个问题,走了不少弯路,需要总结分析一下。

需求只是想用写一个sublime插件来完成一些sql操作。python操作sql,很自然的想用MySQLdb库。但是sublime使用的是自己的python环境,跟系统是隔离的。通过stackoverflow得知基本只有两个思路导入第三方库。一个是指定第三方库的路径,加入到sys.path中,另一个就是改变sublime自身使用的python环境。

改变python自身的环境一般被认为具有比较高的风险,容易引起各种问题。所以最终定位下载第三方库的代码,修改sys.path。下载MySQLdb的代码之后,import MySQLdb报错,_mysql.so不存在。在本地的python库路径里看了一下,有这个文件。复制到sublime插件目录,结果又报错找不到libmysqlclient.18.dylib。这里有两个解决方式,一个是做一个软连接,但是新版mac os做了安全限制,/usr/lib目录不可以写了。关闭安全限制又不是我理解的恰当的方式,最后参考MAC OS 下解决 IMPORT MYSQLDB 报错的问题,使用

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

修改了引用的路径,结果还是报错

Symbol not found: _PyString_Type
  Referenced from: /usr/local/lib/python2.7/site-packages/_mysql.so
  Expected in: flat namespace

看到网上的一些帖子,基本修改了_mysql.so的引用就解决了。

期间还去github上搜代码,只找到一个sublime插件试用了mysqldb,也是sublime2。

这时候考虑到看到的所有的帖子都说的是sublime2,而我用的是sublime3。思路变成本地安装python3环境,重新安装python3的MySQLdb库,再复制到sublime路径。本地安装python3的MySQLdb库时发现也报错了,开始以为是python3环境有问题,搜了一下发现原来是MySQLdb不支持python3。

折腾了好久最后是这个结果。找了几个MySQLdb的替代品,发现pymysql是纯python的库,为了避免浪费更多的时间折腾一些底层的东西,直接就用pymysql了。几分钟解决了问题。

之前遇到的问题几乎google都有现成的方案,这次sublime3 MySQLdb的问题,网上资料很少,最后基本能看的资料都看了。没有新的资料可以参考,突然感觉有点点恐惧。自己解决问题的方式基本是完全依赖Google,基本不用思考,因为google错误提示完全都可以解决。当尝试了多个方案依然无法解决问题的时候就突然不知所措了。这时候才发现原来自己根本没有仔细思考,仔细分析过这个问题。静下来,在本子上理一下现有的田间,要做的事,分析一下可能的思路,可能就不会不知所措了。

Contents