我应该如何在 Mac OS X 上让 MySQLdb 正常工作?
针对使用 Python3 的用户更新:
您可以简单地使用 conda install mysqlclient
安装所需的库以使用 MySQLdb,因为它目前仍然存在。下面的 SO 问题是一个有用的线索:Python 3 ImportError: No module named 'ConfigParser'。安装 mysqlclient 将安装 mysqlclient、mysql-connector 和 llvmdev(至少在我的机器上安装了这三个库)。
以下是我遇到这个问题的经历。如果您对此问题有更好的经验,请编辑或概括一下... 应用一些那种 SO 魔法。
注意:下一段中的注释适用于 Snow Leopard,但不适用于 Lion,后者似乎需要 64 位的 MySQL
首先,MySQLdb 的作者(仍然?)说此处,OS X 自带一个 32 位版本的 Python,但大多数普通人(包括我在内)可能会选择安装 64 位版本的 MySQL。这是个坏决定......如果您已经安装了 64 位版本,请删除它(可在 SO 中找到这个麻烦的任务的说明 here),然后下载并安装 32 位版本(此处提供了包)。
有许多逐步构建和安装 MySQLdb 库的说明。它们之间经常存在细微差别。 这个 在我看来是最受欢迎的,也提供了可行的解决方案。以下是在此基础上做了一些编辑的步骤
步骤0: 在开始之前,我假设您已经在 Mac 上安装了 MySQL、Python 和GCC。
步骤1: 从 SourceForge 下载最新的MySQL for Python adapter。
步骤2: 解压您下载的软件包:
tar xzvf MySQL-python-1.2.2.tar.gz
步骤 3: 在文件夹内清理包:
sudo python setup.py clean
根据这个评论中的建议,需要进行以下两个额外的步骤:
第三步b:删除 MySQL-python-1.2.2/build/* 目录下的所有文件--不要相信 "python setup.py clean" 会帮你完成。
第三步c:删除 Users/$USER/.python-eggs 下的 egg 文件。
第四步:原本需要编辑 _mysql.c 文件,但现在已经不再需要了。MySQLdb 社区似乎已经修复了这个 bug。
第五步:创建一个符号链接到 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
第九步:测试是否运行正常。如果您可以导入MySQLdb,则表示它可以正常工作。
python
>>> 导入 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
然后,您应该能够无错误地导入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
这很容易通过Google查找,但为了节省你的麻烦,你将会在这里找到答案(或者也许不是...不是特别具有未来性的URL),并且需要cd ..
退出生成目录,那么错误就会消失。
正如我在开头所写的那样,我希望看到这个答案得到推广,因为还有许多其他具体的经验可以避免这个可怕的问题。编辑或提供自己的更好的答案。
在Mac OS X 10.8 (山狮), 10.9 (美洲狮), 10.10 (优胜美地)和10.11 (el Capitan)上,提供一种快速简便的方法:
假设您已经安装了XCode、其命令行工具,Python和MySQL。
Install PIP:
sudo easy_install pip
Edit ~/.profile: (Might not be necessary in Mac OS X 10.10)
nano ~/.profile
Copy and paste the following two line
export PATH=/usr/local/mysql/bin:$PATH
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/
Save and exit. Afterwords execute the following command:
source ~/.profile
Install MySQLdb
sudo pip install MySQL-python
To test if everything works fine just try
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
brew install mysql
命令,我不必执行第二个步骤。 - dav.garcia通过Macports安装mysql和python,端口管理者已经完成了所有困难的工作。
sudo port install py26-mysql
sudo port install mysql5-server
如果你只需要连接到 MySQL 而不是运行服务器,那么第一行就足够了。应该安装你所需的内容。(请参见 Stack Overflow 上有关 mysql 服务器的评论)。
现在(2013 年初),MacPorts 将为常见的操作系统和可执行体系结构组合提供二进制下载。对于其他组合(以及如果您请求它),它将从源代码构建。
一般来说,在需要安装复杂的库等情况下,可以使用 MacPorts(或 Fink)进行帮助。
如果只使用 Python 代码并且具有简单的 C 依赖项,则可以通过 setuptools 等设置,但如果混合使用两者,则会变得很复杂。
安装pip:
sudo easy_install pip
安装brew:
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
安装mysql:
brew install mysql
安装MySQLdb
sudo pip install MySQL-python
如果您遇到编译问题,请尝试像这里的其中一条回答中所述那样编辑 ~/.profile 文件。
pip install mysqlclient
安装的。可以工作! - jeremysprofile在完成第9步时,我遇到了一个错误,这是另一步我不得不经历的过程:
ImportError: dlopen(/Users/rick/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
参考资料:感谢!http://ageekstory.blogspot.com/2011_04_01_archive.html
如在Mac上安装MySQL-Python中所述:
pip uninstall MySQL-python
brew install mysql
pip install MySQL-python
python -c "import MySQLdb"
您可以尝试使用纯Python的pymysql
:
sudo easy_install pymysql
(如果您已经安装了pip
,则可以使用它。)然后,在您的代码中import MySQLdb
之前添加以下内容:
try:
import pymysql
pymysql.install_as_MySQLdb()
except ImportError:
pass
我最近在使用新的Lion系统时遇到了这个问题(又一次!)。
我找到了一个最佳解决方案(仍然不是100%最优,但可行):
确保您拥有64位python。如何检查Mac OS X上的库是否为32位/ 64位构建?
如果没有,请安装easy_install。http://packages.python.org/distribute/easy_install.html
如果您没有GCC,请安装它。
您可以通过从Apple下载XCode / Dev Tools来获取它-这是一个大型下载-
…但是我推荐使用这个github,它具有您所需的内容(并且不需要XCode):https://github.com/kennethreitz/osx-gcc-installer
我下载了他们为lion预构建的PKG,https://github.com/downloads/kennethreitz/osx-gcc-installer/GCC-10.7-v2.pkg
确保您已经下载了MYSQL Community的64位版本。(DMG安装是一个简单的路线) http://dev.mysql.com/downloads/mysql/
设置路径如下:
export PATH=$PATH:/usr/local/mysql-XXXX
export DYLD_LIBRARY_PATH = /usr/local/mysql/lib/
export ARCHFLAGS='-arch x86_64'
注意:
1 在 mysql-XXXX 中,XXX 是您下载的特定版本。(可能 /usr/local/mysql/ 也可以,因为这很可能是相同的别名,但我不会假装知道您的设置)
2 我看到有人建议将 ARCHFLAGS 设置为“-arch i386 -arch x86_64”,但仅指定 x86_64 对我来说似乎效果更好。(我可以想出一些原因,但它们并不严格相关)。
安装 MySQL-python:
easy_install MySQL-python
最后一步:
永久添加 DYLD_LIBRARY_PATH!
您可以将其添加到 bash_profile 或类似文件中。 对我来说,这是缺失的一步,没有它,我的系统继续坚持在找 _mysql.so 等错误。
export DYLD_LIBRARY_PATH = /usr/local/mysql/lib/
@richard-boardman,刚注意到您的软链接解决方案,这实际上可能正在执行与我的 PATH 解决方案相同的操作...朋友们,无论哪种方法都最适合您。
最佳参考资料:http://activeintelligence.org/blog/archive/mysql-python-aka-mysqldb-on-osx-lion/
或者简单地尝试:
> sudo easy_install MySQL-python
那么只需运行以下命令:EnvironmentError: mysql_config not found
> export PATH=$PATH:/usr/local/mysql/bin
这篇回答是一个更新,大约在2019年11月。目前流行的pip安装方式无法在MacOS 10.13(以及可能的其他版本)上提供可用的设置。下面是我让事情正常工作的简单方法:
brew install mysql
pip install mysqlclient
如果您需要安装brew的帮助,请查看此网站: https://brew.sh/
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
。 - David Underhillsudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
。一旦我运行了这个命令,它就像预期的那样导入了...终于。对于那些处于类似位置的人,这只是一个提示。 - Friendly King