前言
剛開始開發(fā)Web的時候,沒太在意隔離虛擬環(huán)境,用了系統(tǒng)的那一套,Python2.7版本是系統(tǒng)自帶的,雖說明年就結(jié)束了,但是現(xiàn)在開發(fā)都會有一套3.x以上的環(huán)境,即使你開發(fā)不注意,你部署的時候總歸是要隔離出來的。
1.方便隔離,不同環(huán)境編寫測試
2.方便遷移,
pip freeze
到出包文件依賴,隨后提交管理和遷移都很方便
virtualenv
前提是你有兩套Python
mikejingdeMacBook-Pro:~ MKJ$
which
python
/usr/bin/python
mikejingdeMacBook-Pro:~ MKJ$
which
python3
/usr/local/bin/python3
Python將所有三方包托管到一個公共倉庫,任何人都能從這個公共倉庫下載并安裝所有的三方包。Python將三方包公共倉庫命名為PyPI以表示Python Package Index的縮寫(被一些人戲稱為"cheese shop")。從PyPI上安裝三方包非常簡單,Python專門提供了一個名為pip的工具來解決這個問題(Python2.7中不含pip工具,需要單獨安裝)
mikejingdeMacBook-Pro:~ MKJ$ pip list
-bash: pip:
command
not found
mikejingdeMacBook-Pro:~ MKJ$ pip3 list
Package Version
---------- -------
pip 18.1
setuptools 40.5.0
wheel 0.32.2
可以看到Python2.7不會自帶pip,3的話就會自帶上面三個包。
為了解決維護不同應(yīng)用程序?qū)?yīng)不同版本的問題,Python使用了虛擬環(huán)境的概念。 虛擬環(huán)境是Python解釋器的完整副本。在虛擬環(huán)境中安裝三方包時只會作用到虛擬環(huán)境,全局Python解釋器不受影響。 那么,就為每個應(yīng)用程序安裝各自的虛擬環(huán)境吧。
首先我們看下是否在各自環(huán)境下有安裝
virtualenv
bogon:~ MKJ$ pip list
bogon:~ MKJ$ pip3 list
Package Version
---------- -------
pip 18.1
setuptools 40.5.0
virtualenv 16.6.1
wheel 0.32.2
bogon:~ MKJ$
沒有的話
pip
install
virtualenv
安裝虛擬環(huán)境方法一(Django演示 + virtualenv)
1.創(chuàng)建虛擬環(huán)境目錄
mkdir
flask_project
cd
flask_project
2.到底是副本出Python2還是Python3虛擬環(huán)境
你想創(chuàng)建哪套虛擬環(huán)境可以根據(jù)
-p
指定,首先可以用
which python
,
which python3
拿到執(zhí)行文件目錄
virtualenv venv
# 該方法默認用系統(tǒng)2.7創(chuàng)建出虛擬環(huán)境
virtualenv -p /usr/local/bin/python3 venv
# 指定Python3創(chuàng)建出虛擬環(huán)境
3.激活/關(guān)閉
# 激活
source
venv/bin/activate
# 或者
# . venv/bin/activate
# 激活后此時你的終端前綴就變化了
# deactivate 是關(guān)閉環(huán)境
4.以Django為例創(chuàng)建一個Hello world
退出后每次進去
venv
文件夾目錄,然后
. /venv/bin/activate
后啟動虛擬環(huán)境,隨后安裝
pip install django
,以下是虛擬環(huán)境下包,和全局的2.7或者3.x的不會有任何交叉,獨立的
(
venv
)
mikejingdeMacBook-Pro:django-project MKJ$ pip list
Package Version
---------- -------
Django 2.2.2
pip 19.1.1
pytz 2019.1
setuptools 41.0.1
sqlparse 0.3.0
wheel 0.33.4
這里這是簡單的寫個Django的Hello World,具體細節(jié)和為什么就不在這里說了,以后有空再寫博客出來介紹
5.啟動項目
django-admin startproject mysite
6 .創(chuàng)建app
python manage.py startapp blogs
7 .進入app模塊創(chuàng)建
urls.py
from
django
.
urls
import
path
from
.
import
views
app_name
=
"blogs"
urlpatterns
=
[
path
(
''
,
views
.
index
,
name
=
'index'
)
]
8 .編寫
views.py
from django.shortcuts
import
render
from django.http
import
HttpResponse
# Create your views here.
def index
(
request
)
:
return
HttpResponse
(
'Hello World'
)
9 .blogs同級目錄下的mysite中編寫urls路由
from django.contrib
import
admin
from django.urls
import
path, include
urlpatterns
=
[
path
(
'admin/'
, admin.site.urls
)
,
path
(
'blogs/'
, include
(
'blogs.urls'
))
]
10 .回到
manage.py
目錄下啟動服務(wù)
python manage.py runserver
11.打開
127.0.0.1:8000/blogs
就能看到我們上面寫的第一個 Django編寫的Hello world
安裝虛擬環(huán)境二 (Flask演示 + Python3.4以上自帶創(chuàng)建環(huán)境)
Python版本低于3.4,默認是不支持一下方式創(chuàng)建虛擬環(huán)境
1.創(chuàng)建目錄
mkdir
flask-project
cd
flask-project
2.安裝虛擬環(huán)境
python3 -m venv venv
使用這個命令來讓Python運行venv包,它會創(chuàng)建一個名為venv的虛擬環(huán)境。 命令中的第一個“venv”是Python虛擬環(huán)境包的名稱 ,第二個是要用于這個特定環(huán)境的虛擬環(huán)境名稱。 如果你覺得這樣很混亂,可以用你自定義的虛擬環(huán)境名字替換第二個venv。我習慣在項目目錄中創(chuàng)建了名為venv的虛擬環(huán)境,所以無論何時cd到一個項目中,都會找到相應(yīng)的虛擬環(huán)境。
3.激活虛擬環(huán)境安裝Flask
.
venv/bin/activate
# 啟動
pip
install
flask
# 安裝flask
4.創(chuàng)建Flask應(yīng)用
應(yīng)用程序是存在于包中的。 在Python中,包含__init__.py文件的子目錄被視為一個可導(dǎo)入的包。 當你導(dǎo)入一個包時,
init
.py會執(zhí)行并定義這個包暴露給外界的屬性。
mkdir
app
# 創(chuàng)建應(yīng)用文件夾
cd
app
# 創(chuàng)建 __init__.py
from flask
import
Flask
app
=
Flask
(
__name__
)
from app
import
routes
# 創(chuàng)建 routes.py
from app
import
app
@app.route
(
'/'
)
@app.route
(
'/index'
)
def index
(
)
:
return
"Hello, World!"
其一,這里有兩個實體名為app。 app包由app目錄和__init__.py腳本來定義構(gòu)成,并在from app import routes語句中被引用。 app變量被定義為__init__.py腳本中的Flask類的一個實例,以至于它成為app包的屬性。
其二,routes模塊是在底部導(dǎo)入的,而不是在腳本的頂部。 最下面的導(dǎo)入是解決循環(huán)導(dǎo)入的問題,這是Flask應(yīng)用程序的常見問題。 你將會看到routes模塊需要導(dǎo)入在這個腳本中定義的app變量, 因此將routes的導(dǎo)入放在底部可以避免由于這兩個文件之間的相互引用而導(dǎo)致的錯誤。
那么在routes模塊中有些什么? 路由是應(yīng)用程序?qū)崿F(xiàn)的不同URL。 在Flask中,應(yīng)用程序路由的處理邏輯被編寫為Python函數(shù),稱為視圖函數(shù)。 視圖函數(shù)被映射到一個或多個路由URL,以便Flask知道當客戶端請求給定的URL時執(zhí)行什么邏輯。
函數(shù)上面的兩個奇怪的@app.route行是裝飾器,
這是Python語言的一個獨特功能。 裝飾器會修改跟在其后的函數(shù)。 裝飾器的常見模式是使用它們將函數(shù)注冊為某些事件的回調(diào)函數(shù)。 在這種情況下,@app.route修飾器在作為參數(shù)給出的URL和函數(shù)之間創(chuàng)建一個關(guān)聯(lián)。
在這個例子中,有兩個裝飾器,它們將URL /和/index索引關(guān)聯(lián)到這個函數(shù)。 這意味著,當Web瀏覽器請求這兩個URL中的任何一個時,F(xiàn)lask將調(diào)用該函數(shù)并將其返回值作為響應(yīng)傳遞回瀏覽器。這樣做是為了在運行這個應(yīng)用程序的時候會稍微有一點點意義。
5 .創(chuàng)建腳本
回到
flask-project
,創(chuàng)建一個manage.py的文件,加入
from
app
import
app
Flask應(yīng)用程序?qū)嵗环Q為app,是app包的成員。from app import app語句從app包導(dǎo)入其成員app變量。
flask-project/
venv/
app/
__init__.py
routes.py
manage.py
6 .設(shè)置Flask環(huán)境變量
export
FLASK_APP
=
manage.py
7 .啟動
(
venv
)
mikejingdeMacBook-Pro:flask_project MKJ$ flask run
* Environment: production
WARNING: This is a development server. Do not use it
in
a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/
(
Press CTRL+C to quit
)
8 .環(huán)境變量設(shè)置
上面的環(huán)境變量是臨時的,你如果喜歡可以每次設(shè)置,如果永久的話需要安裝如下
從 1.0 版本開始,F(xiàn)lask 允許你設(shè)置只會在運行flask命令時自動注冊生效的環(huán)境變量,要實現(xiàn)這點,你需要安裝 python-dotenv:
(
venv
)
$ pip
install
python-dotenv
此時,在項目的根目錄下新建一個名為 .flaskenv 的文件,其內(nèi)容是:
FLASK_APP
=
manage.py
Pytharm 自動創(chuàng)建
Pytharm --- Preference --- Project.xxx --- Project Interpreter
就是我們工程虛擬環(huán)境的配置項
參考文檔
Flask文檔
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
