日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Django或者Flask創(chuàng)建Python虛擬環(huán)境啟動第一個Hello

系統(tǒng) 1806 0

前言

剛開始開發(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元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 玛曲县| 合川市| 色达县| 海盐县| 彩票| 山东省| 舞钢市| 板桥市| 布尔津县| 三穗县| 巴青县| 牙克石市| 衡水市| 独山县| 进贤县| 台中市| 太保市| 河源市| 繁峙县| 大渡口区| 抚宁县| 渑池县| 永宁县| 丹江口市| 盐山县| 崇义县| 察雅县| 通江县| 甘谷县| 凌海市| 青州市| 确山县| 施秉县| 龙陵县| 墨江| 开远市| 神木县| 靖西县| 桂东县| 满城县| 汝南县|