原文來自:Bloghome博客
原文地址:https://www.bloghome.com.cn/post/djangoru-keng-zhi-lu-yi-djangojie-shao-ji-huan-jing-da-jian-ubuntu-apache-virtualenv.html
Django簡介
隨著Python的日漸流行芯杀,其成為了一門讓人不得不重視的編程語言巩检。簡而言之巨朦,Python有下面幾大優(yōu)勢(shì):
- Python是解釋性語言,無需編譯直接運(yùn)行宙项。在計(jì)算機(jī)內(nèi)部,Python解釋器把源代碼轉(zhuǎn)換成稱為字節(jié)碼的中間形式,然后再把它翻譯成計(jì)算機(jī)使用的機(jī)器語言并運(yùn)行舔箭。這使得使用Python更加簡單菱阵。也使得Python程序更加易于移植踢俄。
- Python的安裝和部署非常方便。Python的大部分模塊都是用Python編寫的晴及,因此安裝Python模塊非常方便都办,對(duì)于環(huán)境的兼容性也更好。對(duì)比PHP虑稼,使用pip可以一步安裝好所有的Python模塊琳钉,并且不容易出錯(cuò)。
- Python語法簡單蛛倦,網(wǎng)傳實(shí)現(xiàn)相同功能歌懒,使用Python編寫的代碼量最小(有待驗(yàn)證)溯壶。
從很多年前開始及皂,Django(姜戈)就已經(jīng)是Python鄰域中最知名的Web應(yīng)用框架了。筆者公司也有多個(gè)內(nèi)部項(xiàng)目基于Django茸塞。雖然筆者之前也寫過一些簡單的Python腳本躲庄,但是當(dāng)遇到一個(gè)規(guī)模較大的項(xiàng)目時(shí),有很多東西都需要從頭學(xué)起的钾虐,也遇到了很多坑噪窘,下面我就要把踩過的坑都記錄下來,同時(shí)分享給大家,讓更多的人少踩點(diǎn)坑倔监。
Python版本的那些事兒
Python到現(xiàn)在經(jīng)歷了2個(gè)重要的版本直砂,Python2和Python3。 Python2目前最為常用的版本是2.7浩习,也就是Liux操作系統(tǒng)上預(yù)裝的Python静暂。筆者的操作系統(tǒng)是Ubuntu 18.04,如下是我查看到的python版本:
$python --version
Python 2.7.15+
$ls -al /usr/bin/python
lrwxrwxrwx 1 root root 9 4月 16 2018 /usr/bin/python -> python2.7
Django從2.0版本開始就已經(jīng)不再支持Python2.7谱秽,因此我們還需要Python3洽蛀。筆者電腦上默認(rèn)安裝了Python3.6,也可以手動(dòng)安裝:
$apt install python3 python3-dev
查看Python3的版本:
$ls -al /usr/bin/python3
lrwxrwxrwx 1 root root 9 10月 25 2018 /usr/bin/python3 -> python3.6
$python3 --version
Python 3.6.8
安裝pip3
sudo apt install python3-pip
由此可見疟赊,使用python
命令調(diào)用的是python2.7郊供,而如果調(diào)用Python3.6則要使用python3
命令。
注:可以使用update-alternatives --config python
命令將切換python
命令的版本至python3.6近哟,詳見此文驮审。不過,這樣操作可能會(huì)影響到操作系統(tǒng)中的一些預(yù)裝應(yīng)用吉执。如何找到使用Python3的正確姿勢(shì)疯淫?請(qǐng)接著往下看。
在安裝Django之前戳玫,我們還要了解到Django的不同版本與Python版本之間的依賴關(guān)系熙掺,見下表:
Django版本 | Python版本 |
---|---|
1.8 | 2.7, 3.2 , 3.3, 3.4, 3.5 |
1.9, 1.10 | 2.7, 3.4, 3.5 |
1.11 | 2.7, 3.4, 3.5, 3.6 |
2.0 | 3.4, 3.5, 3.6, 3.7 |
2.1, 2.2 | 3.5, 3.6, 3.7 |
由此可見,Python3.6支持Django1.11以上的版本咕宿,而1.10及一下的版本不支持适掰。筆者就踩了一個(gè)坑,項(xiàng)目中設(shè)定的Django版本是1.10荠列,而開發(fā)環(huán)境安裝的Python3.6类浪,引起一些莫名其妙的錯(cuò)誤。將Django升級(jí)到1.11后問題才得到解決肌似。
Python中的版本控制神器Virtualenv
能否指定項(xiàng)目中使用的Python版本费就,而不影響同一操作系統(tǒng)中的其他Python項(xiàng)目?這就是Virtualenv這個(gè)神器存在的意義了川队。virtualenv 是一個(gè)創(chuàng)建隔絕的Python環(huán)境的工具力细。virtualenv創(chuàng)建一個(gè)包含所有必要的可執(zhí)行文件的文件夾,用來使用Python工程所需的包固额。關(guān)于Virtualenv的介紹和基本用法眠蚂,參見此文,這里我不做詳細(xì)介紹了斗躏,基本步驟如下:
- 安裝Virtualenv:
pip3 install virtualenv
- 啟用Virtualenv:
$cd /workspace/my_project
$virtualenv -p /usr/bin/python3.6 .venv
$source .venv/bin/activate
virtualenv需要一個(gè)獨(dú)立的文件夾來安裝特定版本的依賴包逝慧。我們可以把它理解為node_modules
。因此,創(chuàng)建在項(xiàng)目文件夾下較為適合(.venv)笛臣。使用-p /usr/bin/python3.6
參數(shù)云稚,指定了當(dāng)前虛擬環(huán)境基于python3.6。激活虛擬環(huán)境后沈堡,可以看到命令行提示符增加了一個(gè)前綴((.venv)$
)静陈,在此命令提示符下,使用pip安裝的包都會(huì)被安裝到.venv文件夾诞丽。輸入exit
可退出虛擬環(huán)境鲸拥。如果要?jiǎng)h除此虛擬環(huán)境,直接刪除.venv就可以了僧免。