MacOs安裝python3後啟動django的網站,提示mysqlclient元件不存在,直接安裝又出錯,仲麼辦呢?
今日閑來無事,增加硬碟1T,蘋果安裝不利,Django出錯生氣。
django.core.exceptions.ImproperlyConfigured:
Error loading MySQLdb module:
No module named 'MySQLdb'
Error loading MySQLdb module.
Did you install mysqlclient?
記得以前為了這個問題題折騰了好久,今天把解決過程寫下,終于搞清了這個問題。
這個問題主要是版本不相容的問題,其實存在兩個問題:
1、MySqldb與mysqlclient問題。這兩個東東都是Django官方支援的用于python的mysql的驅動,網上的關于MySqldb的元件的90%的說法是不正确或是過時的:“MySqldb不支援python3必須要使用pymysql來替代” 。mysqlclient就是從MySqldb改進而來完全支援Python3,如果你是window或是Linux按照下面的網址教程安裝完畢就好可以使用了。
https://github.com/PyMySQL/mysqlclient-python
2、MacOS 的特殊性。 在MacOS系統當中brew安裝很費事,要折騰很多,并且有衆多的元件安裝方法與Linux又不同。
兩個解決方案:
方案一、替代方案
具體原理就是:使用pymysql元件(這個元件可以支援python3),替代django中的mysqlclient。
把原生的Oracle的元件,換成pymysql,後效率可能會下降。
1、使用如下的指令行安裝PyMySQL
python3 -m pip install pymysql
2、在項目的setting.py同級的 init.py 檔案中添加以下代碼即可。
import pymysql
pymysql.install_as_MySQLdb()
方案二、安裝mysqlclient
在MacOS安裝mysqlclient可麻煩了,下面是簡要的步驟:
1、 安裝xcode
在App Store中找到Xcode并安裝它,直到出現這個圖示,打開同意即可:
Xcode
然後在終端中運作:
xcode-select --install
2、安裝brew。
很多mysqlclient需要的元件都必須從brew中安裝,由于國外的鏡像很慢,建議從國内中科大的鏡像安裝。
2.1 官網安裝Homebrew(不推薦)
官網網址:https://brew.sh/
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
由于特别原因安裝的速度可能會斷,建議搭配使用一些外網互聯上網工具進行安裝。
2.2 國内鏡像安裝(推薦)
(1) 擷取install檔案
擷取官網腳本并儲存名為 brew_install
(這一步也需一點點技術手段進行互聯上網):
https://raw.githubusercontent.com/Homebrew/install/master/install
(2)替換成清華大學的鏡像
打開 brew_install 檔案,修改如下:
找到如下代碼:
BREW_REPO = “https://github.com/Homebrew/brew“.freeze
CORE_TAP_REPO = “https://github.com/Homebrew/homebrew-core“.freeze
更改為:
BREW_REPO = “https://mirrors.ustc.edu.cn/brew.git “.freeze
CORE_TAP_REPO = “https://mirrors.ustc.edu.cn/homebrew-core.git“.freeze
注意: 新版本HomeBrew可能沒有
CORE_TAP_REPO
這句代碼,如果沒有不用新增。 如果這個鏡像有問題的話,可以換成其他源。
(3)執行腳本
打開終端允許腳本
/usr/bin/ruby brew_install
安裝過程
如果走運,全部安裝完了,就進行下一步(4)。
如果此時腳本停在
==> Tapping homebrew/core
Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core'...
出現這個原因是因為源不通,代碼來不下來,解決方法就是更換國内鏡像源:
手動執行下面這句指令,更換為中科院的鏡像:
git clone git://mirrors.ustc.edu.cn/homebrew-core.git/ /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core --depth=1
然後把homebrew-core的鏡像位址也設為中科院的國内鏡像
cd "$(brew --repo)"
git remote set-url origin https://mirrors.ustc.edu.cn/brew.git
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git
執行更新,成功:
brew update
最後用這個指令檢查無錯誤:
brew doctor
至此HomeBrew就安裝完成了。
(4)更改預設源
直接使用 Homebrew 還需要更改預設源。以下是将預設源替換為國内 USTC 源的方法。 如下:
替換倉庫核心軟體
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git
替換 cask 軟體倉庫(提供 macOS 應用和大型二進制檔案)
cd "$(brew --repo)"/Library/Taps/caskroom/homebrew-cask
git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-cask.git
替換 Bottles 源(Homebrew 預編譯二進制軟體包)
bash(預設 shell)使用者:
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.bash_profile
source ~/.bash_profile
(6) brew常用指令
3、安裝必要的元件
先安裝gcc元件:
brew install gcc
安裝完畢後,再安裝
brew install openssl
并且下面要把環變量設定好,友善python3找到。否則會出現下面的錯誤:
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: command 'gcc' failed with exit status 1
/private/var/folders/by/c1t20gqd2b3crsh5v7x1gfh80000gn/T/pip-install-unlf6wgo/mysqlclient/
在 這指令行中這麼設定環境:
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
最後可以放心地安裝:
python3 -m pip install mysqlclient
真搞不定,使用方案一,也能用。