【发布时间】:2010-11-29 17:23:16
【问题描述】:
我是一名 Python 新手,但我刚刚花了一天时间研究如何让 MySQLdb 正常工作,根据谷歌的说法,宇宙包括许多关于它是什么 PITA 的参考,以及大量的指南似乎已经过时了。鉴于此站点旨在解决此类问题,并且我知道我将来需要参考解决方案,我将提出问题,提供我的答案并看看还有什么浮动到表面。
所以问题是如何让MySQLdb 在 Mac OS X 上工作?
【问题讨论】:
我是一名 Python 新手,但我刚刚花了一天时间研究如何让 MySQLdb 正常工作,根据谷歌的说法,宇宙包括许多关于它是什么 PITA 的参考,以及大量的指南似乎已经过时了。鉴于此站点旨在解决此类问题,并且我知道我将来需要参考解决方案,我将提出问题,提供我的答案并看看还有什么浮动到表面。
所以问题是如何让MySQLdb 在 Mac OS X 上工作?
【问题讨论】:
使用 Python3 的更新:
您可以简单地使用 conda install mysqlclient 安装使用 MySQLdb 所需的库,因为它当前存在。以下 SO 问题是一个有用的线索:Python 3 ImportError: No module named 'ConfigParser'。安装 mysqlclient 会安装 mysqlclient、mysql-connector 和 llvmdev(至少,它在我的机器上安装了这 3 个库)。
这是我在这个问题上的漫无边际经历的故事。如果您对这个问题有更好的经验,希望看到它被编辑或概括……应用一些 SO 魔法。
注意:下一段中的注释适用于 Snow Leopard,但不适用于 Lion,这似乎需要 64 位 MySQL
首先,MySQLdb 的作者(还是?)说here 最有害的问题之一是 OS X 安装了 32 位版本的 Python,但大多数普通人(包括我自己)可能会跳到安装 64 位版本的 MySQL。糟糕的举动...如果您已安装 64 位版本,请删除它(有关此繁琐任务的说明可在 SO here 上找到),然后下载并安装 32 位版本(包 here)
有很多关于如何构建和安装 MySQLdb 库的分步说明。他们经常有细微的差别。 This 对我来说似乎是最受欢迎的,并提供了可行的解决方案。我已经复制了它,并在下面进行了一些编辑
第 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
几个额外的步骤,(来自this comment)
步骤 3b: 删除 MySQL-python-1.2.2/build/* 目录下的所有内容——不要相信“python setup.py clean”会为你做这件事
步骤 3c: 删除Users/$USER/.python-eggs下的egg
第 4 步: 最初需要编辑 _mysql.c,但现在不再需要。 MySQLdb 社区现在似乎已经修复了这个错误。
第 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:用户警告:模块_mysql已从/Library/Python导入/2.5/site-packages/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg/_mysql.pyc,但正在将 XXXX/MySQL-python-1.2.3c1 添加到 sys.path
这对 Google 来说很容易,但为了省去你的麻烦,你最终会找到 here(或者可能不是......不是一个特别面向未来的 URL)并发现你需要 cd .. build 目录,错误应该会消失。
正如我在顶部所写的那样,我希望看到这个答案被概括,因为这个可怕的问题还有许多其他具体的经验。编辑掉,或提供您自己的更好的答案。
【讨论】:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib。一旦我运行它,它就会按预期导入......最后。哇哇哇。仅供类似职位的人参考。
Mac OS X 10.8 (Mountain Lion)、10.9 (Mavericks)、10.10 (Yosemite) 和10.11(埃尔卡皮坦):
我假设你已经安装了 XCode、command line tools、Python 和 MySQL。
安装画中画:
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
【讨论】:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib 命令。
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/
brew install mysql安装MySQL后,我就不用第二步了。
通过Macports安装mysql和python,搬运工们辛苦了。
sudo port install py26-mysql
sudo port install mysql5-server
应该安装你需要的东西。 (见Stack overflow for comments re mysql server)
如果你只需要连接mysql而不运行服务器,那么第一行就足够了。
Macports 现在(2013 年初)将为常见的操作系统组合和可执行架构提供二进制下载,对于其他人(如果您要求),它将从源代码构建。
当需要安装复杂的库等时,通常 macports(或 fink)会提供帮助。
仅 Python 的代码,如果可以通过 setuptools 等设置简单的 C 依赖项,但如果将两者混合使用就会变得复杂。
【讨论】:
安装点子:
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 代替。有效!
这是我在完成第 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
【讨论】:
如Installing MySQL-python on mac 所述:
pip uninstall MySQL-python
brew install mysql
pip install MySQL-python
然后测试它:
python -c "import MySQLdb"
【讨论】:
刚买了一个新的 Lion 盒子后,又遇到了这个问题。
我找到的最佳解决方案(仍然不是 100% 最佳,但有效):
确保您拥有 64 位 python。 How to check if a library is 32bit/64bit built on Mac OS X?
如果没有,请安装 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
确保您已下载 64 位版本的 MYSQL 社区。 (DMG 安装很简单)http://dev.mysql.com/downloads/mysql/
设置路径如下:
导出 PATH=$PATH:/usr/local/mysql-XXXX
导出 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 似乎对我来说效果更好。 (我可以想到一些原因,但它们并不严格相关)。
安装野兽!
easy_install MySQL-python
最后一步:
永久添加 DYLD_LIBRARY_PATH!
您可以将其添加到您的 bash_profile 或类似文件中。 这对我来说是缺少的一步,没有它,我的系统继续坚持查找_mysql.so等各种错误。
导出 DYLD_LIBRARY_PATH = /usr/local/mysql/lib/
@richard-boardman,刚刚注意到您的软链接解决方案,它实际上可能与我的 PATH 解决方案所做的相同......伙计们,无论哪种方式最适合您。
最佳参考: http://activeintelligence.org/blog/archive/mysql-python-aka-mysqldb-on-osx-lion/
【讨论】:
您可以尝试使用纯python pymysql:
sudo easy_install pymysql
(如果您已安装,则使用 pip。)然后,在您的代码中添加 import MySQLdb 之前:
try:
import pymysql
pymysql.install_as_MySQLdb()
except ImportError:
pass
【讨论】:
或者简单的尝试:
> 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/
【讨论】:
如果您使用的是 64 位 MySQL,则在构建 mysql-python 库时使用 ARCHFLAGS 指定您的 cpu 架构即可:
ARCHFLAGS='-arch x86_64' python setup.py build
ARCHFLAGS='-arch x86_64' python setup.py install
【讨论】:
export PATH=$PATH:/usr/local/mysql/bin/
应该为您解决问题,因为系统无法找到 mysql_config 文件。
【讨论】:
在 macos Sierra 上,这对我有用,python 由 anaconda 管理:
anaconda search -t conda mysql-python
anaconda show CEFCA/mysql-python
conda install --channel https://conda.anaconda.org/CEFCA mysql-python
与 SQLAlchemy 一起使用:
Python 2.7.13 |Continuum Analytics, Inc.| (默认,2016 年 12 月 20 日,23:05:08) [GCC 4.2.1 兼容 Apple LLVM 6.0 (clang-600.0.57)] 在 darwin 输入“帮助”、“版权”、“信用”或“许可”以获取更多信息。 Anaconda 由 Continuum Analytics 提供给您。 请查看:http://continuum.io/thanks 和 https://anaconda.org
>>> 从 sqlalchemy 导入 *
>>>dbengine = create_engine('mysql://....')
【讨论】:
我遇到了这个问题,发现mysqlclient需要知道在哪里可以找到openssl,而OSX默认隐藏了这个。
使用brew info openssl 找到openssl,然后将openssl bin 的路径添加到PATH:
export PATH="/usr/local/opt/openssl/bin:$PATH"
我建议将其添加到您的 .zshrc 或 .bashrc 中,这样您以后就不必担心它了。然后,导出该变量(可能需要关闭和重新打开 bash 会话),再添加两个 env 变量:
# in terminal
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
然后,最后,运行:
pipenv install mysqlclient
它应该安装得很好。
来源:https://medium.com/@shandou/pipenv-install-mysqlclient-on-macosx-7c253b0112f2
【讨论】: