Install MySQLdb in virtualenv,從入門到放棄

本人使用的是OSX,在安裝MySQLdb的過程中遇到不少坑,和大家分享一下,也為以后留存。只是做一個整理,并不會有太多個人心得。多以評注為主。

MySQL Server 密碼重置

本機環(huán)境
Mac OS X EI Capitan
官網 Community 版 MySQL Server
虛擬環(huán)境 virtualenv
pwd: /User/jtr109/qs/

密碼重置的方式多種多樣,用很多我嘗試之后這個是我唯一可行的,和我有相同環(huán)境、情況的朋友可以參考:數據庫之mac上mysql root密碼忘記或權限錯誤的解決辦法。

遇到這個問題主要是我裝MySQL的時候不專心,傳說官方dmg裝完后是會提示設定密碼的,不知道怎么回事,反正我本地的MySQL Server就完全進不去了,只能改密碼。這篇文章講的非常清晰,簡單易懂,不做過多評論。只要每一步照做就好。此文最大的優(yōu)點是不用終端運行MySQL Server,也不用考慮 kill 進程,非常適合剛剛接觸相關內容的朋友。

安裝 MySQLdb

首先進入你需要的路徑,我們以 /User/jtr109/qs/ 為例。執(zhí)行 virtualenv venv 創(chuàng)建虛擬環(huán)境包, source venv/bin/activate 進入虛擬環(huán)境。

注意安裝模塊名

我不知道為什么這個模塊叫 MySQLdb,import 語句也是 import MySQLdb。但是你要注意,pip 安裝語句為: pip install MySQL-python。千萬不要寫錯。不過因為你在虛擬環(huán)境,所以玩脫了就這個環(huán)境包刪了就好。這也是我為什么推崇為每個項目創(chuàng)建虛擬環(huán)境的原因之一。

修改 _mysql.so 追蹤路徑

現在你可以試著進入 python, 然后運行:

>>> import MySQLdb
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/jtr109/qs/venv/lib/python2.7/site-packages/MySQLdb/__init__.py", line 19, in <module>
    import _mysql
ImportError: dlopen(/Users/qs/venv/lib/python2.7/site-packages/_mysql.so, 2): Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.20.dylib
  Referenced from: /Users/jtr109/qs/venv/lib/python2.7/site-packages/_mysql.so
  Reason: image not found

很好,你跟我遇到一樣的問題了。

此時你需要的是這篇文章:Mac OS X下修復Reason: image not found。當然,更重要的是里面給的另一個鏈接: Python mysqldb: Library not loaded: libmysqlclient.18.dylib

試著執(zhí)行:

$ otool -L /Users/jtr109/qs/venv/lib/python2.7/site-packages/_mysql.so
/Users/jtr109/mystuff/qstrategy/venv/lib/python2.7/site-packages/_mysql.so:
    /usr/local/opt/mysql/lib/libmysqlclient.20.dylib (compatibility version 20.0.0, current version 20.0.0)
    /usr/local/opt/openssl/lib/libssl.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)

我的 dylib20 的,請根據自身調整。

來分析一下。第一個鏈接講的比較清楚了,根據報錯提示也可以看出,其實就是 MySQLdb 調用了 _mysql ,但是 _mysql.so 并沒有在默認路徑 /usr/local/opt/mysql/lib/libmysqlclient.20.dylib 找到這個文件。那接下來我們要做的就是改變他的搜索路徑:

注意我們需要用到的 install_name_tool 語句的規(guī)則如下:

install_name_tool [-change old new] input

幾個參數的對應關系:

dylib 文件默認查找路徑(old): usr/local/opt/mysql/lib/libmysqlclient.20.dylib
我們需要 dylib 查找的路徑(new): usr/local/mysql/lib/libmysqlclient.20.dylib
修改的 _mysql.so 文件位置: /Users/jtr109/qs/venv/lib/python2.7/site-packages/_mysql.so

所以執(zhí)行如下語句:

$ sudo install_name_tool -change /usr/local/opt/mysql/lib/libmysqlclient.20.dylib /usr/local/mysql/lib/libmysqlclient.20.dylib /Users/jtr109/qs/venv/lib/python2.7/site-packages/_mysql.so

這里有個很奇怪的點,兩篇參考文章的 old 路徑給的都只是文件名,我嘗試下來并不能夠改變 _mysql.so 中的查找路徑。所以無論你是否按照我的語句改變查找路徑,請務必再次執(zhí)行 otool 確定 _mysql.so 中的查找路徑是否更新了!

確認更新后,再試試在python中運行 import MySQLdb。問題解決!

Tips: 這種解決方法意味著每次你新創(chuàng)建的 virtuanenv 中需要用到 MySQL,你都必須修改 _mysql.so。第一個鏈接中有一個自制的腳本用來執(zhí)行這一操作,我沒細看,大家可以參考一下。

那就寫到這里吧,希望大家都能跑通。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容