当前位置: 首页 > 面试题库 >

Python导入MySQLdb错误-Mac 10.6

田琛
2023-03-14
问题内容

我下载并遵循了MySQL
5.5.8(http://dev.mysql.com/downloads/mysql/)和MySQLdb
python插件的安装说明。(http://sourceforge.net/projects/mysql-
python/)

当我尝试将MySQLdb导入到python终端时,出现以下错误:

Safira:~ yanigisawa$ python --version
Python 2.6.1
Safira:~ yanigisawa$ python -c "import MySQLdb"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "build/bdist.macosx-10.6-universal/egg/MySQLdb/__init__.py", line 19, in <module>
  File "build/bdist.macosx-10.6-universal/egg/_mysql.py", line 7, in <module>
  File "build/bdist.macosx-10.6-universal/egg/_mysql.py", line 6, in __bootstrap__
ImportError: dlopen(/Users/yanigisawa/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.16.dylib
  Referenced from: /Users/yanigisawa/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so
  Reason: image not found
Safira:~ yanigisawa$

我在堆栈溢出中发现了问题4559699,并按照那里的指示进行操作:

Safira:~ yanigisawa$ echo $DYLD_LIBRARY_PATH
/usr/local/mysql/lib
Safira:~ yanigisawa$ ls -l /usr/local/mysql/lib
total 363224
-rwxr-xr-x   1 root  wheel   3787328 Jan 18 19:41 libmysqlclient.16.dylib
-rw-r--r--   1 root  wheel  10035336 Dec  3 13:26 libmysqlclient.a
lrwxr-xr-x   1 root  wheel        23 Jan 14 22:01 libmysqlclient.dylib -> libmysqlclient.16.dylib
lrwxr-xr-x   1 root  wheel        20 Jan 14 22:01 libmysqlclient_r.16.dylib -> libmysqlclient.dylib
lrwxr-xr-x   1 root  wheel        16 Jan 14 22:01 libmysqlclient_r.a -> libmysqlclient.a
lrwxr-xr-x   1 root  wheel        20 Jan 14 22:01 libmysqlclient_r.dylib -> libmysqlclient.dylib
-rw-r--r--   1 root  wheel  88033760 Dec  3 13:22 libmysqld-debug.a
-rw-r--r--   1 root  wheel  84075304 Dec  3 13:26 libmysqld.a
-rw-r--r--   1 root  wheel      8472 Dec  3 13:26 libmysqlservices.a
drwxr-xr-x  13 root  wheel       442 Dec  3 13:53 plugin
Safira:~ yanigisawa$ md5 /usr/local/mysql/lib/libmysqlclient.16.dylib 
MD5 (/usr/local/mysql/lib/libmysqlclient.16.dylib) = b8a78a93183720021b9dbe9ddad57111
Safira:~ yanigisawa$

在清理了所有的python egg文件并重建之后,我仍然遇到相同的错误。然后我在MySQL 5.5.8中发现了影响Mac 10.6的bug
59006(http://bugs.mysql.com/bug.php?id=59006)。我尝试了此处列出的解决方法,清理了鸡蛋并重新构建,但仍然出现此错误。

对于此特定于python的问题,还有另一种解决方法吗?我还有其他东西吗?

编辑 :从otool命令添加输出:

Safira:~ yanigisawa$ otool -L /Users/yanigisawa/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so
/Users/yanigisawa/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so:
    libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)
Safira:~ yanigisawa$ otool -DX /usr/local/mysql/lib/libmysqlclient.16.dylib
/usr/local/mysql/lib/libmysqlclient.16.dylib
Safira:~ yanigisawa$

问题答案:

您可以尝试运行otool来确切找出MySQLdbC扩展_mysql.so正在查找的库路径:

$ otool -L /Users/yanigisawa/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so

然后是已安装的MySQL库文件的库名称:

$ otool -DX /usr/local/mysql/lib/libmysqlclient.16.dylib

但是您不必诉诸设置DYLD_LIBRARY_PATH(或install_name_tool用于修改可执行文件);设置它的需要几乎总是表明组件构建或安装不正确。以我的经验,MySQL项目在其OS
X构建和安装程序的一致性方面没有很好的跟踪记录,因为您引用的这个问题往往会得到证实。

试图让的工作相结合PythonMySQLdb以及MySQL在OS X
10.6库是无奈的一个非常常见的原因:很多关于它的问题在这里SO和其他地方。有很多原因。我的建议是从第三方分销商之一那里获得完整的解决方案,该解决方案将构建和安装您所需的所有内容的兼容版本。如果您需要随着时间的推移升级组件,它应该可以继续工作。这些年来,我取得了很大的成功MacPorts;其他人更喜欢Fink或更新HomeBrew。使用MacPorts,从MacPorts安装基本文件后。dmg,您可以像这样构建所有内容:

$ sudo port selfupdate  # ensure the port files are up-to-date
$ sudo port install py26-mysql

MacPorts Python将在上提供/opt/local/bin/python2.6。如果您想运行Django,那么也有一个端口。

编辑:使用来自的更新输出otool,您可以看到库路径名不匹配。MySQLdb扩展名要求一个相对路径名(没有initial
/),而MySQL库使用绝对路径(通常是您想要的)来宣传自己。这似乎与MySQL问题59006相反,但是,在不确切知道到目前为止您已经执行了哪些步骤的情况下,很难说出如何达到此状态。您
可能
可以使用install_name_tool来打补丁_mysql.so以具有绝对路径名,这也将消除对set的任何需要DYLD_LIBRARY_PATH。值得尝试:

$ cd ~/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp
$ sudo install_name_tool -change libmysqlclient.16.dylib \
                                 /usr/local/mysql/lib/libmysqlclient.16.dylib \
                         _mysql.so

但这不应该让您感到温暖和模糊,可以在需要更新某些内容时重现结果。试图将来自不同来源的所有这些片段粘合成有效的东西确实没有任何好处。



 类似资料:
  • 问题内容: 我需要不时动态地更改表和变量,因此我编写了这样的python方法: 但是,这导致语法错误异常。我尝试对其进行调试,因此我将变量打印在方法中,然后手动将其填充,并且可以正常工作。所以我不确定我在做什么错? 是因为我尝试使用表的替代品吗? 另外,我该如何调试mysqldb以便将替换查询打印为字符串? 问题答案: DB API中的参数替换仅适用于值-不适用于表或字段。您将需要使用普通的字符串

  • 问题内容: 我似乎无法获得鼻子测试框架来识别文件结构中测试脚本下的模块。我设置了最简单的示例来演示该问题。我会在下面解释。 这是包文件的结构: foo.py包含: tests / test_foo.py包含: 两个 init .py文件均为空 如果我在主目录(foo.py所在的目录)中运行,则会得到: 当我从tests /目录中运行时,出现相同的错误。根据文档和我发现的示例,nose应该将所有父包

  • 我正在从我的Java代码中调用一个Python脚本。这是代码: python.py工作 python.py不起作用 所以,我正处于一个关键的阶段,我的启动有一个最后期限,我必须向客户展示我的MVP项目,我想像这样调用Python脚本。当我在没有dB连接和MySQLdb库的情况下打印任何东西时,它起作用。但是当我包含它们时,它并不运行python脚本。这里怎么了。不是应该运行处理所有输入的进程吗。我

  • 我正试着用这本手册开始tensorflowhttps://www.tensorflow.org/install/install_windows 所有安装都成功完成,我正在使用python 3.5.2和最新版本的pip,遇到这个错误,有人告诉我应该怎么做吗? 在swig\parth\AppData\Local\Programs\Python35\lib\site-p tensorflow\Pytho

  • 问题内容: 我一直在使用python dns模块。我试图在新的Linux安装上使用它,但该模块未加载。我试图清理并安装,但安装似乎无法正常进行。 更新了python版本和pip版本命令的输出 非常感谢你的帮助。 注意:-我在新计算机上安装了防火墙。我不确定它是否会影响导入。但我试图禁用它,但它似乎仍然无法正常工作。 问题答案: 我遇到了与dnspython相同的问题。 我的解决方案是从他们的官方G

  • 我在用python 3.5安装opencv时遇到一些困难。 我已经链接的cv文件,但在我得到一个错误说或更具体地说: /库/框架/Python。framework/Versions/3.5/bin/python3。5/用户/杰米/桌面/测试仪/测试。py回溯(最后一次调用):文件“/Users/Jamie/Desktop/tester/test.py”,第2行,导入cv文件“/Library/Fr