MAMP Python-MySQLdb问题:一旦调用Python文件,libssl.1.0.0.dylib的路径就会改变

Ano*_*use 5 python mysql mamp python-2.7

我正在尝试使用python MySQLdb访问我的MAMP服务器上的MySQL数据库.

当我最初尝试使用python-sql调用Python文件来访问我在MAMP上的数据库时,我得到了image not found关于libssl.1.0.0.dylib库的错误

 Traceback (most recent call last):
  File "desktopsql.py", line 3, in <module>
    import _mysql as ms
  File "build/bdist.macosx-10.5-x86_64/egg/_mysql.py", line 7, in <module>
  File "build/bdist.macosx-10.5-x86_64/egg/_mysql.py", line 6, in __bootstrap__

  ImportError: 
   dlopen(/Users/username/.python-eggs/MySQL_python-1.2.5-py2.7-macosx-
  10.5-x86_64.egg-tmp/_mysql.so, 2): 

  Library not loaded: libssl.1.0.0.dylib

  Referenced from: 
   /Users/username/.python-eggs/MySQL_python-1.2.5-py2.7-macosx-10.5-x86_64.egg-tmp/_mysql.so

  Reason: image not found
Run Code Online (Sandbox Code Playgroud)

因此,我通过更改libssl.1.0.0.dylib路径使用 来修复它export DYLD_LIBRARY_PATH=/Users/username/anaconda/lib/:$DYLD_LIBRARY_PATH,但必须对我希望执行Python文件的每个文件夹执行此操作.

因此,当我尝试PHP在我的MAMP网页上执行Python文件时,我再次收到错误,这次我无法使用临时修复来掩盖它.

我试图进一步修复它使用install_name_tool将错误的库位置更改/Users/username/.python-eggs/MySQL_python-1.2.5-py2.7-macosx-10.5-x86_64.egg-tmp/_mysql.so为实际存储的位置/Users/username/anaconda/lib/

sudo install_name_tool -change 
libssl.1.0.0.dylib 
/Users/username/anaconda/lib/libssl.1.0.0.dylib 
/Users/username/.python-eggs/MySQL_python-1.2.5-py2.7-macosx-10.5-x86_64.egg-tmp/_mysql.so
Run Code Online (Sandbox Code Playgroud)

在这样做之后,我otool -L用来查看我已经更改的状态,结果表明文件路径确实已经更改为正确的位置.

otool -L 
/Users/username/.python-eggs/MySQL_python-1.2.5-py2.7-macosx-10.5-x86_64.egg-tmp/_mysql.so

    /Users/username/anaconda/lib/libssl.1.0.0.dylib 
    (compatibility version 1.0.0, current version 1.0.0)
Run Code Online (Sandbox Code Playgroud)

但是,当我再次运行python文件时,我收到image not found错误.otool -L再次运行时,结果显示文件路径已再次恢复.

/Users/username/.python-eggs/MySQL_python-1.2.5-py2.7-macosx-10.5-x86_64.egg-tmp/_mysql.so:

    libssl.1.0.0.dylib 
    (compatibility version 1.0.0, current version 1.0.0)
Run Code Online (Sandbox Code Playgroud)

因此它会更改到正确的位置,直到我运行python文件并再次返回到之前的状态.

为什么会这样?有什么我可以做的,以保持我改变它的东西?

Ano*_*use 6

所以我发现我应该使用该libssl.1.0.0.dylib文件/usr/lib,而不是错误提到的文件,这Users/$USERNAME/.python-eggs/MySQL_python-1.2.5-py2.7-macosx-10.5-x86_64.egg-tmp/_mysql.so在我的情况下.

我创建了一个符号链接到libssl.1.0.0.dylib应该引用的地方(/Users/$USERNAME/anaconda/lib/对我而言),使用

sudo ln -s /Users/$USERNAME/anaconda/lib/libssl.1.0.0.dylib /usr/lib/libssl.1.0.0.dylib

并且,一旦完成,同样的libcrypto.1.0.0.dylib,因为它抛出相同的错误.

sudo ln -s /Users/$USERNAME/anaconda/lib/libcrypto.1.0.0.dylib /usr/lib/libcrypto.1.0.0.dylib

作为旁注,列出/usr/bin这两个文件时列为libss.dyliblibcrypto.dylib.

  • 试图在Mac OS X上安装https://github.com/cvondrick/vatic,我也遇到了这个问题.这里的解决方案完美无缺. (2认同)
  • 如果使用OSX El Capitan,/ usr/lib默认为写保护(即使在sudo中).要关闭此功能,请按照[这些](http://apple.stackexchange.com/questions/208478/how-do-i-disable-system-integrity-protection-sip-aka-rootless-on-os-x- 10-11)步骤 (2认同)