簡體   English   中英

在OS X上使用Django中的MySQL時找不到libmysqlclient.18.dylib映像

[英]libmysqlclient.18.dylib image not found when using MySQL from Django on OS X

我開始學習Python / Django的路徑,並且遇到了我的第一個障礙。 嘗試在settings.pysettings.py數據庫時,內部服務器失敗並顯示:

File "/Library/Python/2.7/site-packages/django/db/backends/mysql/base.py", line 16, in <module>
raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Users/rob/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
Referenced from: /Users/rob/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg-tmp/_mysql.so
Reason: image not found

我找到了很多解決方案,主要涉及我的DYLD_LIBRARY_PATH值的明確定義,但這對我不起作用。 安裝了MysQL-Python (v1.2.3)。

知道我可能需要做些什么才能完成這項工作?

謝謝。

UPDATE

DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.mysql',  # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
    'NAME': 'django_tutorial',                      # Or path to database file if using sqlite3.
    'USER': 'root',                      # Not used with sqlite3.
    'PASSWORD': '',                  # Not used with sqlite3.
    'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
    'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
  }
}

從您的注釋中可以看出, libmysqlclient dylib安裝時帶有非絕對庫名稱路徑。 這與OS X上的標准做法相反,OS X在這方面與大多數其他Unix-y系統不同。 您應該能夠通過使用install_name_tool修改.so文件中的路徑來永久修復問題(至少在下次升級之前),或者通過確保Django實例運行並定義了以下環境變量來使其工作:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib

你也可以通過在/usr/local/lib創建一個符號鏈接到/usr/local/mysql/lib的dylib,因為/usr/local/lib在默認的動態加載搜索路徑上,所以你也可以使它工作。 (未經測試!)類似於:

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

一個更好的長期解決方案是不使用Python導入MySQLdb錯誤 - Mac 10.6中建議的破壞的MySQL客戶端安裝。

使用自制mysql安裝,這對我有用

$ mdfind libmysqlclient
/usr/local/Cellar/mysql/5.7.9/lib/libmysqlclient.20.dylib
/usr/local/Cellar/mysql/5.7.9/lib/libmysqlclient.a
/usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib
/usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.a
/usr/local/Cellar/mysql/5.6.26/lib/libmysqlclient.18.dylib
/usr/local/Cellar/mysql/5.6.26/lib/libmysqlclient.a

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

您最近可能已經升級了mysql。 當我用Brew將MySql從5.6升級到5.7時,我遇到了這個問題。 這肯定打破了一些libs,但是將mysql重新連接回5.6修復了這個問題。 首先看看你之前使用過的mysql版本: brew info mysql ,然后使用brew switch mysql 5.6.22命令切換回該版本。

確保你不僅僅是MySql-Python,而是實際的MySql。 MySQL-python正在嘗試加載mysql庫,它應該在/ usr / local / mysql-VERSION / lib之類的地方。

試試跑步

mdfind libmysqlclient

在命令行上。 掃描這些結果,如果你沒有看到它丟失的文件(libmysqlclient.18.dylib),那么你可能沒有正確安裝mysql。

我沒有足夠的聲譽來評論Ned Deily上面的答案:),但環境變量方法在修正錯字之后對我有用; 它應該是:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib

如果你走那條路,我會建議兩件事; 確保您不使用任何其他DYLD_LIBRARY_PATH設置

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

並將其放在.bashrc文件中,這樣您就不必記住在每個終端會話中設置它。

通過符號鏈接選項對此方法的好處是它將允許找到所有mysql dylib文件,而不僅僅是您特定符號鏈接的文件。

你能告訴我們您的settings.py代碼嗎? 您也可以嘗試編輯mysql_config文件的路徑以指向/ usr / local / mysql / bin / mysql_config,如本文中更詳細討論的那樣: http//dakrauth.com/blog/entry/python-and-django -setup-MAC-OS-X-豹/

暫無
暫無

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

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