如何在Mac OS X上安装MySQLdb(Python连接MySQL的数据访问库)?
我该如何在Mac OS X上让MySQLdb正常工作呢?
14 个回答
通过Macports安装mysql和python。这个工具帮你处理了很多复杂的事情。
sudo port install py26-mysql
sudo port install mysql5-server
这应该能安装你需要的东西。(可以查看Stack Overflow上的评论,了解关于mysql服务器的更多信息)
如果你只是想连接mysql,而不是运行一个服务器,那么第一行的内容就足够了。
在2013年初,Macports会提供常见操作系统和可执行架构的二进制下载,对于其他情况(如果你需要的话),它会从源代码编译。
一般来说,macports(或者fink)在需要安装复杂库的时候会很有帮助。
如果只是用python代码,简单的C依赖可以通过setuptools等工具设置,但如果把两者混在一起,就会变得复杂。
这里有一个简单的方法,适用于 Mac OS X 10.8 (山狮)、10.9 (美洲狮)、10.10 (优胜美地) 和 10.11 (埃尔卡皮坦):
我假设你已经安装了 XCode、它的 命令行工具、Python 和 MySQL。
安装 PIP:
sudo easy_install pip
编辑 ~/.profile: (在 Mac OS X 10.10 中可能不需要)
nano ~/.profile
复制并粘贴以下两行
export PATH=/usr/local/mysql/bin:$PATH export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/
保存并退出。然后执行以下命令:
source ~/.profile
安装 MySQLdb
sudo pip install MySQL-python
要测试一切是否正常,可以尝试
python -c "import MySQLdb"
对我来说,这个方法非常有效。
如果你遇到一个关于缺少库的错误:Library not loaded: libmysqlclient.18.dylib,那么你需要将它链接到 /usr/lib
,方法如下:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
给使用Python3的朋友们的更新:
你可以直接使用 conda install mysqlclient
来安装使用MySQLdb所需的库。目前的情况是,这个命令会安装mysqlclient、mysql-connector和llvmdev(至少在我的电脑上安装了这三个库)。
下面是我在解决这个问题时的一些经历。如果你有更好的经验,欢迎修改或补充,让这个回答更完善。
注意:下面段落的评论适用于Snow Leopard,但不适用于Lion,后者似乎需要64位的MySQL
首先,MySQLdb的作者(还在吗?)在这里提到一个很麻烦的问题,那就是OS X自带的是32位版本的Python,而大多数普通用户(包括我自己)可能会直接安装64位的MySQL。这是个错误的选择……如果你安装了64位版本,请把它卸载掉(关于这个麻烦的操作可以在SO上找到说明,点击这里),然后下载并安装32位版本(可以在这里找到)。
关于如何构建和安装MySQLdb库,有很多详细的步骤说明。它们之间常常有些微妙的差别。我觉得这个是最受欢迎的,提供了有效的解决方案。下面是我根据它做的一些修改。
步骤0: 在开始之前,我假设你已经在Mac上安装了MySQL、Python和GCC。
步骤1: 从SourceForge下载最新的MySQL for Python适配器。
步骤2: 解压你下载的包:
tar xzvf MySQL-python-1.2.2.tar.gz
步骤3: 在文件夹内,清理包:
sudo python setup.py clean
额外的几个步骤,(来自这个评论)
步骤3b: 删除MySQL-python-1.2.2/build/*目录下的所有内容——不要指望“python setup.py clean”能帮你完成这项工作。
步骤3c: 删除Users/$USER/.python-eggs下的egg文件。
步骤4: 最初需要编辑_mysql.c,但现在不再需要了。MySQLdb社区似乎已经修复了这个bug。
步骤5: 在lib下创建一个符号链接,指向一个名为mysql的子目录。编译时会在这里查找。
sudo ln -s /usr/local/mysql/lib /usr/local/mysql/lib/mysql
步骤6: 编辑setup_posix.py,修改以下内容:
mysql_config.path = "mysql_config"
改为:
mysql_config.path = "/usr/local/mysql/bin/mysql_config"
步骤7: 在同一目录下,重新构建你的包(忽略随之而来的警告)。
sudo python setup.py build
步骤8: 安装包,完成。
sudo python setup.py install
步骤9: 测试是否成功。如果你能导入MySQLdb,就说明成功了。
python
>>> import MySQLdb
步骤10:
如果在尝试导入时收到错误,提示 Library not loaded: libmysqlclient.18.dylib
,并且结尾是 Reason: image not found
,你需要创建一个额外的符号链接,如下:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
然后你应该能够顺利地 import MySQLdb
,没有任何错误。
不过还有一个小问题,如果你从构建目录启动Python,会出现这个错误:
/Library/Python/2.5/site-packages/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg/_mysql.py:3: UserWarning: Module _mysql was already imported from /Library/Python/2.5/site-packages/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg/_mysql.pyc, but XXXX/MySQL-python-1.2.3c1 is being added to sys.path
这个问题很容易在网上找到解决办法,但为了省去你的麻烦,你会发现自己最终会来到这里(或者不……这个链接可能不太稳定),你需要执行 cd ..
退出构建目录,这样错误就会消失。
正如我在开头所说,我希望这个回答能更普遍一些,因为还有很多其他人也遇到过这个麻烦的问题。欢迎编辑或提供你自己的更好答案。