簡體   English   中英

Python mysqldb:未加載庫:libmysqlclient.18.dylib

[英]Python mysqldb: Library not loaded: libmysqlclient.18.dylib

我剛剛在我的mac os 10.6上為python 2.7編譯並安裝了mysqldb。 我創建了一個導入的簡單測試文件

import MySQLdb as mysql

首先,這個命令帶有紅色下划線,信息告訴我“Unresolved import”。 然后我嘗試運行以下簡單的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

什么可能解決我的問題?

編輯:其實我發現該庫位於/ usr / local / mysql / lib中。 所以我需要告訴我的pydev eclipse版本在哪里找到它。 我在哪里設置這個?

我通過創建到庫的符號鏈接解決了這個問題。

實際的圖書館駐留在

/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

我首選的方法是實際修復庫而不是使用環境變量,這些環境變量可能實際上也可能不在實際范圍內,具體取決於應用程序的運行方式。 這實際上是一個相當簡單的過程。

首先,查看錯誤輸出以查看有問題的python模塊所在的位置:

ImportError:dlopen(/Library/Python/2.7/site-packages/_mysql.so,2):未加載庫:libmysqlclient.18.dylib引用自:/Library/Python/2.7/site-packages/_mysql.so原因:圖像未找到

好的,所以有問題的文件是/Library/Python/2.7/site-packages/_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)

我發現這個問題還有另一個解決方案,而不是創建一個符號鏈接。

將libmysqlclient.18.dylib所在目錄的路徑設置為DYLD_LIBRARY_PATH環境變量。 我做的是在我的.bash_profile中添加以下行:

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

而已。

在我的情況下,我得到了Mac OS X 10.9 Mavericks的錯誤。 我直接從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文件http://apps.tempel.org/FindAnyFile這樣的文件。 這是我最初找到dylib文件的位置的方法。

我發現將它放在你的.profile或.bashrc(無論你使用哪個)是最簡單的方法,與保存源文件中的路徑相比,sym鏈接很麻煩。

另外與yoshisurfs的答案相比,大多數時候安裝mysql的mysql目錄應該重命名為mysql,而不是整個文件名,以方便使用。

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

我遇到了幾個虛擬環境。

pip uninstall MySQL-python
pip install -U MySQL-python

兩次工作。

對於那些使用自制軟件的人,你可以解決這個問題:

$ brew link mysql

在pydev eclipse插件中,您可能希望為DYLD設置環境變量。 可以如下所示設置路徑

在雪豹上安裝mysqldb

當您在El Capitan時,將收到錯誤: ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted需要關閉“系統完整性保護”。

首先,重新啟動並按住cmd + R進入恢復模式,然后啟動終端並輸入命令: csrutil disable ,現在您可以重新啟動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,但在最終版本中已經過時,您可以在此處閱讀更多相關信息: https//forums.developer.apple.com/thread/4686

題:

Developer Beta 1中提供了一個nvram boot-args命令,可以在以root權限運行時禁用SIP:

nvram boot-args="rootless=0"

這個禁用SIP的選項是否也可以在El Capitan發布版本中使用? 或者這是否嚴格用於開發人員構建?

回答:

這個nvram boot-args命令將會消失。 它不會在El Capitan發行版中提供,並可能在開發者Betas結束之前消失。 密切關注未來Developer Betas的發行說明。

在我的案例中,在El Capitan(OSX 10.11)中,我必須在~/.bash_profile執行以下操作

export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:${DYLD_LIBRARY_PATH}"
export PATH="/usr/local/mysql/lib:${PATH}"

我有這個問題,我花了一段時間來弄清楚如何解決這個問題。

我的情況略有不同。 我的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不適合我。

轉到http://dev.mysql.com/downloads/connector/c/並下載MySQL Connector / C. 獲取包后,創建一個新目錄'mysql',解壓縮目錄mysql下的Mysql Connector文件,然后在mysql下,再創建一個空目錄'build'。我們將使用'build'構建MySQL Connector / C. cd build && cmake ../your-MySQL-Connector-source-dir在make install之后make && make install,你將在/ usr / local下獲得一個名為mysql的目錄。 它包含你需要的所有頭文件和庫。轉到這個目錄,並將頭文件和庫復制到相應的位置。

你可以試試:

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`

注意關於macOS上的MySQL Connector / C的bug(我目前的版本是10.13.2),修復mysql_config並重新安裝mysqlclient或MySQL-python, 這里是詳細信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM