Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python mysqldb:未加载库:libmysqlclient.18.dylib_Python_Mysql Python - Fatal编程技术网

Python mysqldb:未加载库:libmysqlclient.18.dylib

Python mysqldb:未加载库:libmysqlclient.18.dylib,python,mysql-python,Python,Mysql Python,我刚刚在mac os 10.6上编译并安装了mysqldb for python 2.7。我创建了一个简单的导入测试文件 import MySQLdb as mysql 首先,该命令带红色下划线,信息告诉我“未解析导入”。然后我尝试运行以下简单的python代码 import MySQLdb as mysql def main(): conn = mysql.connect( charset="utf8", use_unicode=True, host="localhost",use

我刚刚在mac os 10.6上编译并安装了mysqldb for python 2.7。我创建了一个简单的导入测试文件

import MySQLdb as mysql
首先,该命令带红色下划线,信息告诉我“未解析导入”。然后我尝试运行以下简单的python代码

import MySQLdb as mysql

def main():
    conn = mysql.connect( charset="utf8", use_unicode=True, host="localhost",user="root", passwd="",db="" )

if __name__ == '__main__'():
    main()
当执行它时,我得到以下错误消息

Traceback (most recent call last):
  File "/path/to/project/Python/src/cvdv/TestMySQLdb.py", line 4, in <module>
    import MySQLdb as mysql
  File "build/bdist.macosx-10.6-intel/egg/MySQLdb/__init__.py", line 19, in <module>
    \namespace cvdv
  File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 7, in <module>
  File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 6, in __bootstrap__
ImportError: dlopen(/Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so
  Reason: image not found
回溯(最近一次呼叫最后一次):
文件“/path/to/project/Python/src/cvdv/TestMySQLdb.py”,第4行,在
将MySQLdb作为mysql导入
文件“build/bdist.macosx-10.6-intel/egg/MySQLdb/_init__.py”,第19行,在
\命名空间cvdv
文件“build/bdist.macosx-10.6-intel/egg/_mysql.py”,第7行,在
文件“build/bdist.macosx-10.6-intel/egg/_mysql.py”,第6行,在引导程序中__
ImportError:dlopen(/Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp//u MySQL.so,2):未加载库:libmysqlclient.18.dylib
引用自:/Users/toom/.python-eggs/MySQL\u python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp//u MySQL.so
原因:找不到图像
我的问题有什么解决办法

编辑:
实际上我发现这个库位于/usr/local/mysql/lib中。所以我需要告诉我的pydeveclipse版本在哪里可以找到它。我在哪里设置这个?

在pydev eclipse插件中,您可能需要为DYLD设置环境变量。可以设置路径,如中所示


我通过创建指向库的符号链接解决了这个问题。即

实际的库位于

/usr/local/mysql/lib
然后我在中创建了一个符号链接

/usr/lib
使用命令:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
因此,我有以下映射:

ls -l libmysqlclient.18.dylib 
lrwxr-xr-x  1 root  wheel  44 16 Jul 14:01 libmysqlclient.18.dylib -> /usr/local/mysql/lib/libmysqlclient.18.dylib
就这样。从那以后一切都很顺利

编辑:

请注意,由于MacOS El Capitan,系统完整性保护(SIP,也称为“无根”)将阻止您在
/usr/lib/
中创建链接。 您可以通过以下方式禁用SIP,但可以改为在
/usr/local/lib/
中创建链接:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

我发现这个问题还有另一个解决方案,而不是创建一个符号链接

将libmysqlclient.18.dylib所在目录的路径设置为DYLD_LIBRARY_path环境变量。我所做的是在我的.bash_配置文件中添加以下行:

export DYLD_LIBRARY_PATH=/usr/local/mysql-5.5.15-osx10.6-x86/lib/:$DYLD_LIBRARY_PATH

就是这样。

我发现把它放在你的.profile或.bashrc(无论你用哪个)中是最简单的方法,sym链接比在你的源文件中保留路径更混乱

与yoshisurfs answer相比,大多数情况下安装mysql时,mysql目录应该重命名为mysql,而不是整个文件名,以便于使用

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

我的首选方法是实际修复库,而不是使用环境变量,这些环境变量可能在范围内,也可能不在范围内,具体取决于应用程序的运行方式。这实际上是一个相当简单的过程

首先,查看错误输出以查看有问题的python模块的位置:

ImportError:dlopen(/Library/Python/2.7/site-packages//\u mysql.so,2):未加载库:libmysqlclient.18.dylib 引用自:/Library/Python/2.7/site-packages//\u mysql.so 原因:找不到图像

好的,那么有问题的文件是/Library/Python/2.7/site-packages//\u mysql.so

接下来,找出_mysql.so认为应该在哪里找到libmysqlclient.18.dylib:

% otool -L /Library/Python/2.7/site-packages/_mysql.so
/Library/Python/2.7/site-packages/_mysql.so:
    libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
因此,它正在寻找没有路径信息的libmysqlclient.18.dylib,让我们修复它:

% sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Library/Python/2.7/site-packages/_mysql.so
现在,不管环境变量如何,mysql.so都知道库的完整路径,一切正常

% otool -L /Library/Python/2.7/site-packages/_mysql.so                                                                                           
/Library/Python/2.7/site-packages/_mysql.so:
    /usr/local/mysql/lib/libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

在我的例子中,我在MacOSX10.9Mavericks中遇到了错误。我直接从DMG的Oracle/MySQL网站安装了MySQL社区服务器

我所需要做的就是将lib文件符号链接到/usr/local/lib目录

mkdir -p /usr/local/lib   
ln -s /usr/local/mysql/lib/libmysql* /usr/local/lib

另外:如果您也运行Mac OS X,那么有一个很好的工具可以查找libmysqlclient.18.dylib文件之类的文件。这就是我最初找到动态库文件位置的方式

我遇到了这个问题,我花了一段时间才找到解决方法

我的情况略有不同。我的MySQL服务器是5.1.x版本。不知何故,我将MySQL python从1.2.3升级到了1.2.5。从那以后,我一直收到这个问题,我添加了以下软链接

libmysqlclient.18.dylib -> /usr/local/mysql/lib/libmysqlclient.18.dylib
事实证明,对于MySQL 5.1.x,没有libmysqlclient.18.dylib,只有libmysqlclient.16.dylib。您可以通过将MySQL python降级到1.2.3或将MySQL服务器升级到5.6.x(我还没有尝试过5.5.x)来解决这个问题


我将库降级为1.2.3,因为升级MySQL不是我的选择。

对于那些使用自制的用户,您可以通过以下方式解决此问题:

$ brew link mysql

当您在El Capitan时,将出现错误:
ln:/usr/lib/libmysqlclient.18.dylib:不允许操作
需要关闭“系统完整性保护”


首先,重新启动并按住cmd+R进入恢复模式,然后启动终端并键入命令:
csrutil disable
,现在您可以重新启动并重试。

在新El Capitan安装上,默认情况下,SIP(无根阻止访问usr/lib/)处于打开状态,除非处于恢复模式,否则无法创建符号链接。正如@yannisxu所说的,您可以禁用SIP并将符号链接到/usr/lib/local,这将起作用

您可以在MAC OSX El Capitan上使用以下命令,而不是关闭SIP:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
以前有一个选项,您可以以root用户身份登录,这可以禁用SIP,但在现在已过时的最终版本中,您可以在此处阅读更多关于它的内容:

问题:

Developer Beta 1中提供了一个nvram引导args命令,当以root权限运行时,该命令可以禁用SIP:

nvram boot-args="rootless=0"
El Capitan发布版本中是否也有禁用SIP的选项?或者这是严格针对开发人员构建的

答复:

此nvram引导参数命令将消失。它将不会在El Capitan发行版中提供,并可能在开发者测试版结束前消失
export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:${DYLD_LIBRARY_PATH}"
export PATH="/usr/local/mysql/lib:${PATH}"
pip uninstall MySQL-python
pip install -U MySQL-python
sudo install_name_tool -change libmysqlclient.18.dylib /Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so`