使用 Homebrew 安装 MySQL 和 Python
我在 OS X 10.10.5 Yosemite 上使用 Homebrew 安装了 MySQL 和 Python。我的 Python 2.7 位于 python -> ../Cellar/python/2.7.9/bin/python
并在 /usr/local/bin/python
处有一个符号链接(symbolic link).
在 /usr/local/bin
中有一个符号链接(symbolic link):
mysql -> ../Cellar/mysql/5.7.9/bin/mysql
错误
在 Python 外壳中:
>>> import MySQLdb
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/MySQLdb/__init__.py", line 19, in <module>
import _mysql
ImportError: dlopen(/usr/local/lib/python2.7/site-packages/_mysql.so, 2): Library not loaded: /usr/local/lib/libmysqlclient.18.dylib
Referenced from: /usr/local/lib/python2.7/site-packages/_mysql.so
Reason: image not found
所以我尝试了:
$ sudo unlink/usr/local/lib/libmysqlclient.18.dylib
后跟:
DYLD_LIBRARY_PATH=/usr/local/mysql/lib/:$DYLD_LIBRARY_PATH
然后(对理性的绝望):
$ export DYLD_LIBRARY_PATH=/usr/local/Cellar/mysql/5.7.9/lib
但在这两种情况下 import MySQLdb
仍然尝试导入 libmysqlclient.18.dylib
。
然后我尝试了:
$ pip install -U MySQL-python
并得到:
要求已经更新:/usr/local/lib/python2.7/site-packages 中的 MySQL-python
现有答案
许多 answers to this problem on SO建议手动创建带有版本号的库的显式符号链接(symbolic link)(在我的情况下为 libmysqlclient.20.dylib
)。然而,考虑到现有的符号链接(symbolic link),这似乎很粗糙,而且不是面向 future 的:
在/usr/local/lib
中有
libmysqlclient.dylib -> ../Cellar/mysql/5.7.9/lib/libmysqlclient.dylib
在 /usr/local/Cellar/mysql/5.7.9/lib
我们发现:
libmysqlclient.20.dylib
在同一目录中带有符号链接(symbolic link):
libmysqlclient.dylib -> libmysqlclient.20.dylib
如何让Python忘记libmysqlclient.18.dylib
?
那么我怎样才能让 Python 忘记 /usr/local/lib/libmysqlclient.18.dylib
并遵循 /usr/local/lib
中的正确符号链接(symbolic link)到 libmysqlclient.dylib
,无需手动添加另一个符号链接(symbolic link)?
最佳答案
我也遇到过这个问题。我卸载了 MySQL-python,然后安装了它。
pip uninstall MySQL-python
pip install MySQL-python
更新(基于评论)
在某些情况下,您可能需要按以下方式执行第二个(安装)步骤:
pip install --no-binary MySQL-python MySQL-python
no-binary
选项是让 pip 重新构建它并链接到正确的库:
--no-binary <format_control>
Do not use binary packages. Can be supplied multiple times, and each time adds to the existing value. Accepts either :all: to disable all binary packages, :none: to empty the set, or one or more package names with commas between them. Note that some packages are tricky to compile and may fail to install when this option is used on them.
注意:请注意,MySQL-python
需要提及twice .如上所述,第一次出现的是要应用 no-binary
的包的名称。选项,第二个指定要安装的包。
关于Python 的 MySQLdb 无法使用 Homebrewed MySQL 找到 libmysqlclient.dylib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34536914/