Python、Brew和MySQLdb

7

我一直在使用brew安装的Python。我想用setuptools(根据mysql_python的说明)安装mysql_python egg,它被安装在/usr/local/lib/python2.7/site-packages/。依赖项已处理等。

然后我尝试运行python控制台,我可以导入其他东西(例如import django; print django.VERSION可以正常工作),但是当我导入MySQLdb时,我会得到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/Cellar/python/2.7.1/lib/python2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.4-x86_64.egg/MySQLdb/__init__.py", line 19, in <module>
    import _mysql
ImportError: dlopen(/usr/local/Cellar/python/2.7.1/lib/python2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.4-x86_64.egg/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /usr/local/Cellar/python/2.7.1/lib/python2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.4-x86_64.egg/_mysql.so
  Reason: image not found

有什么见解吗?非常感谢。

听起来你在某种程度上混合使用了本机OSX Python和Brew Python。提供确切的安装命令和输出将有助于解决这个问题。 - Mikko Ohtamaa
我认为我做得很好。mysql_python的安装命令非常基本,只需执行python setup.py build; python setup.py install即可。似乎蛋的安装是针对python2.7的,但是Python控制台从brew的目录打开。如何解决这个混淆问题? - user592419
当您执行python setup.py install时,它是使用OSX本地Python还是Brew构建的Python? - Mikko Ohtamaa
1个回答

15
在尝试重现您的错误时,我按照以下步骤进行操作(假设作为一名homebrew用户,您已经完成了相同的步骤):
1)brew install python 安装Python 2.7
2)brew install mysql 安装mysql到系统中(需要各种驱动程序)
3)按照homebrew的建议配置mysql
4)下载mysql_python并解压缩
5)使用python setup.py install安装mysql_python
6)在交互式会话中测试它,使用python, import _mysql

在 Lion 上按照这些步骤后,我无法重现您的错误。 现在......开始调试您的问题。

有几件事情需要检查:
1)在终端中键入which python时,它是否指向您的homebrew安装?
2)请注意,在homebrew中,site-packages不存储在Cellar中,而是存储在/usr/local/lib/python2.7/site-packages中。有关原因,请参见帖子。 我没有必要将site-packages的位置添加到我的PATH中,但您可以尝试一下。
3)我建议您尝试的最后一件事是,为了使easy_install与homebrew的Python配合使用,我必须将/usr/local/share/python添加到我的PATH中。

编辑
重新阅读错误消息后,主要是滚动到最右边后,我注意到它无法加载一个mysql库。快速谷歌搜索该库似乎表明,当在OS X上安装mysql时,可能会存在链接困难。尝试找到文件libmysqlclient.18.dylib并记录其路径。通过Homebrew安装mysql之后,我的路径是:/usr/local/Cellar/mysql/5.5.14/lib。我看到的常见解决方法是设置环境变量DYLD_LIBRARY_PATH。更多信息可以查看网站。以我的路径为例,我会将以下行添加到我的.bash_profile文件中:

export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/usr/local/Cellar/mysql/5.5.14/lib"

如果这对您不起作用,我强烈建议您检查mysql是否被正确安装或存在问题。带着这种心态,希望您能够找到解决方案。

最后,如果您还没有任何SQL数据库,请考虑卸载mysql并通过Homebrew重新安装。现在,我使用这种设置毫无问题。


  1. Python指向/usr/local/bin/python,这似乎是homebrew的符号链接。我认为这是真实的原因之一是错误显示控制台正在查找Cellar网站包。
  2. Cellar目录/usr/local/Cellar/python/2.7.1/lib/python2.7/site-packages中有MySQL_python egg(就像/usr/local/.../p2.7/s-p dir一样)。
  3. /usr/local/share/python已经在我的路径中。
- user592419
运行 'python setup.py install' 的位置有关系吗? - user592419
@user592419:这就是我猜测的。我认为它在调用已编译的Python,如果不是的话,你肯定会遇到很多其他问题。 - Adam Lewis
只要setup.py没有做任何异常操作-不会有问题。通常,创建setup.py的dist_tools是为了将所有内容安装在执行者(通过which python找到)的site-packages中。重新阅读错误消息后,我认为这实际上可能是与mysql有关,而不是homebrew / python的问题。 - Adam Lewis
@user592419:看看我的编辑吧。我可能为你找到了一些有用的信息。 - Adam Lewis
太棒了,现在它可以工作了。根据你的建议,我检查了“which mysql”,发现它指向不同的版本。我更改了路径,以便它看到mysql的cellar版本,重新执行了python setup.py命令,现在似乎一切正常。谢谢Adam。 - user592419

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接