• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • python virtualenv and hug

    virtualenv

    在開發Python應用程序的時候,系統安裝的Python3只有一個版本:3.4。所有第三方的包都會被pip安裝到Python3的site-packages目錄下。

    如果我們要同時開發多個應用程序,那這些應用程序都會共用一個Python,就是安裝在系統的Python 3。如果應用A需要jinja 2.7,而應用B需要jinja 2.6怎么辦?

    這種情況下,每個應用可能需要各自擁有一套“獨立”的Python運行環境。virtualenv就是用來為一個應用創建一套“隔離”的Python運行環境。

    首先,我們用pip安裝virtualenv:

    $ pip3 install virtualenv
    

    然后,假定我們要開發一個新的項目,需要一套獨立的Python運行環境,可以這么做:

    第一步,創建目錄:

    Mac:~ michael$ mkdir myproject
    Mac:~ michael$ cd myproject/
    Mac:myproject michael$
    

    第二步,創建一個獨立的Python運行環境,命名為venv

    Mac:myproject michael$ virtualenv --no-site-packages venv
    Using base prefix '/usr/local/.../Python.framework/Versions/3.4'
    New python executable in venv/bin/python3.4
    Also creating executable in venv/bin/python
    Installing setuptools, pip, wheel...done.
    

    命令virtualenv就可以創建一個獨立的Python運行環境,我們還加上了參數--no-site-packages,這樣,已經安裝到系統Python環境中的所有第三方包都不會復制過來,這樣,我們就得到了一個不帶任何第三方包的“干凈”的Python運行環境。

    新建的Python環境被放到當前目錄下的venv目錄。有了venv這個Python環境,可以用source進入該環境:

    Mac:myproject michael$ source venv/bin/activate
    (venv)Mac:myproject michael$
    

    注意到命令提示符變了,有個(venv)前綴,表示當前環境是一個名為venv的Python環境。

    下面正常安裝各種第三方包,并運行python命令:

    (venv)Mac:myproject michael$ pip install jinja2
    ...
    Successfully installed jinja2-2.7.3 markupsafe-0.23
    (venv)Mac:myproject michael$ python myapp.py
    ...
    

    venv環境下,用pip安裝的包都被安裝到venv這個環境下,系統Python環境不受任何影響。也就是說,venv環境是專門針對myproject這個應用創建的。

    退出當前的venv環境,使用deactivate命令:

    (venv)Mac:myproject michael$ deactivate 
    Mac:myproject michael$
    

    此時就回到了正常的環境,現在pippython均是在系統Python環境下執行。

    完全可以針對每個應用創建獨立的Python運行環境,這樣就可以對每個應用的Python環境進行隔離。

    virtualenv是如何創建“獨立”的Python運行環境的呢?原理很簡單,就是把系統Python復制一份到virtualenv的環境,用命令source venv/bin/activate進入一個virtualenv環境時,virtualenv會修改相關環境變量,讓命令pythonpip均指向當前的virtualenv環境。

    小結

    virtualenv為應用提供了隔離的Python運行環境,解決了不同應用間多版本的沖突問題。


    RESTful API 框架 HUG 指南

    如果你在用 Python3,如果你需要搭建一個 API 服務,如果時間很緊,那么 HUG 可能就是你的最佳選擇!本文將用輕松易懂的實例教程來帶大家走入 HUG 的世界。


    更新歷史

    • 2017.03.09: 完成初稿

    準備工作

    HUG 是基于 Python3 的,所以我們來安裝一下。一般來說我們會使用 virtualenv 來隔離不同的環境,不然不同的包容易『打架』。比較簡單,跟著敲命令即可。

    # 安裝 Python3,其中 pip3 會隨著 Python3 一并安裝
    # 編譯時間會比較長,請耐心等待
    brew install python3
    # 安裝 VirtualEnv 方便隔離開發
    pip3 install virtualenv
    # 新建一個 ~/hug 文件夾來保存
    virtualenv -p python3 ~/hug
    # **環境
    source ~/hug/bin/activate
    # 離開環境
    deactivate

    配置完成之后,我們就可以安裝 hug 啦,直接 pip3 install hug --upgrade 即可。恭喜,一切完事兒!(如果你手滑,可以再 pip3 install bottle 一下,之后有用)

    Hello World

    按照通常的 Hello World 慣例,我們就來寫一個 API,給訪問這個 API 的用戶問好。就是如下 7 行(文件名為 hello.py):

    import time
    import hug
    @hug.get('/hello')
    def hello(name):
    """Say Hello to the User"""
    ticks = time.time()
    return "Hello {name}! Now is {ticks}".format(**locals())

    然后我們在命令行里輸入 hug -f hello.py,就可以看到如下萌萌的啟動界面:

    然后我們來訪問一下 127.0.0.1:8000,發現返回的結果是這個:

    {
    "404": "The API call you tried to make was not defined. Here's a definition of the API to help you get going :)",
    "documentation": {
    "handlers": {
    "/hello": {
    "GET": {
    "usage": "Say Hello to the User",
    "outputs": {
    "format": "JSON (Javascript Serialized Object Notation)",
    "content_type": "application/json"
    },
    "inputs": {
    "name": {
    "type": "Basic text / string value"
    }
    }
    }
    }
    }
    }
    }

    這個告訴我們,嘿這個 API 我們沒有定義噢,但是我們很貼心的給你列出來已經定義的 API,剩下的你自己看咯!

    好,我們現在知道了,要訪問的是 127.0.0.1:8000/hello,于是我們打開瀏覽器再試一次,發現結果是這個:

    {
    "errors":
    {
    "name": "Required parameter 'name' not supplied"
    }
    }

    噢,這個錯誤提醒我們,一定要給出 name 這個參數,好,那我們訪問 127.0.0.1:8000/hello?name=wdxtub,結果終于對了,像這樣(給出了名字,也給出了當前的時間戳):

    "Hello wdxtub! Now is 1489061160.552566"

    但是這個方法還有一點不好,就是我們改動了代碼,并不會自動重新載入,每次都要手動重啟很麻煩,那怎么辦呢?下一節我們就來搞這個問題。

    自動重啟及 API 測試

    還記得我們之前手滑安裝的 bottle 嗎?接下來就有用啦,我們把代碼改成如***意新增的 import 和下面的 if 部分):

    import hug
    import time
    from bottle import run
    @hug.get('/hello')
    def hello(name):
    """Say Hello to the User"""
    ticks = time.time()
    return "Hello {name}! Now is {ticks}".format(**locals())
    if __name__ == "__main__":
    app = __hug__.http.server()
    run(app=app, reloader=True, port=8000)

    然后在命令行中輸入 python hello.py,就可以看到我們的 API 服務器啟動起來了,如果這個時候我們對 hello.py 做些修改,bottle 會自動幫我們重啟,非常方便!比如我們可以加入下面幾行:

    @hug.get('/', output=hug.output_format.json)
    def root():
    return {'msg': "歡迎來到 HUG 指南"}

    稍等一下,就可以訪問 127.0.0.1:8000 了。當然,使用瀏覽器測試 API 其實是不太方便的,這里推薦一下 Postman 這個 Chrome 應用,可以很方便地進行各類測試。比如像這樣:

    重新認識 HUG

    官方的標題起的很威武霸氣 - 擁抱未來的 API(Embrace the APIs of the future)。借用其簡介:

    Drastically simplify API development over multiple interfaces. With hug, design and develop your API once, then expose it however your clients need to consume it. Be it locally, over HTTP, or through the command line - hug is the fastest and most modern way to create APIs on Python3.

    從前面的例子中我們其實也可以簡單領略到 HUG 的魅力,這里簡單總結一下:

    • 性能高。在如此高的抽象層仍舊不損失太多性能,值得稱贊(接近最快的 falcon
    • 自帶版本管理。簡單制定所屬的 API 版本,就可以用 v1v2 這樣的方式來切換,方便
    • 自動化文檔。只要簡單地在代碼中寫注釋及標注好類型,文檔就自動生成了,省事兒
    • 標記即驗證。利用 Python 3 的 type annotation 能力,可以對每個參數進行驗證和轉換
    • 寫一次到處用。只能用作 API 嗎?錯!還可以用在命令行和其他 python 代碼中,因為業務邏輯很干凈

    好了!現在你已經準備好了!可能教程不是特別『豐富』,但是相信你可以的,畢竟參考鏈接里可是有完整的教程呢!

    參考鏈接



    轉載自:

    https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432712108300322c61f256c74803b43bfd65c6f8d0d0000

    http://wdxtub.com/2017/03/09/hug-guide/

    版權聲明:本文為hlang8160原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/hlang8160/article/details/79130776

    智能推薦

    python virtualenv activate文件分析

    使用virtualenv創建了一個虛擬環境后,需要先執行source activate才能夠**此虛擬環境,其實activate是一個shell腳本文件,本文將對此文件進行分析,以讓讀者明白此腳本的功能。 本文將以我的一個activate文件為例,進行解析。 我的activate文件如下: 關鍵點: 1. 創建VIRTUAL_ENV環境變量,此環境變量執行虛擬環境,然后將此環境變量插入到PATH環...

    Python 虛擬開發環境 virtualenv

    Python 虛擬開發環境 virtualenv 1.下載安裝virtualenv pip3 install virtualenv 2. 創建一個獨立的Python運行環境,命名為 myVir 我們進入PycharmProjects文件下,在該文件夾下執行  命令 virtualenv 就可以創建一個獨立的Python運行環境,我們還加上了參數--...

    python虛擬環境virtualenv

    win10安裝python最新版本,如果忘記勾選添加到path,需要手動配置: C:\Users\Administrator\AppData\Local\Programs\Python\Python38 C:\Users\Administrator\AppData\Local\Programs\Python\Python38\Scripts 安裝時遇到2503報錯: https://blog.cs...

    python中virtualenv的使用

    1. 安裝 注意pip的位置 which pip pip install virtualenv 2. 創建虛擬環境 hlx2@NLP:~$ virtualenv -p /home/hlx2/anaconda3/bin/python3.6 /home/hlx2/OCR/keras-ctpn_gpu -p /home/hlx2/anaconda3/bin/python3.6指定了要復制的python的...

    virtualenv

    1.virtualenv介紹 在python開發中,我們可能會遇到一種情況,就是當前的項目依賴的是某一個版本,但是另一個項目依賴的是另一個版本,這樣就會造成依賴沖突,而virtualenv就是解決這種情況的,virtualenv通過創建一個虛擬化的python運行環境,將我們所需的依賴安裝進去的,不同項目之間相互不干擾,如下所示。    2.安裝virtualenv  ...

    猜你喜歡

    【Virtualenv】Python的虛擬環境Virtualenv和Virtualenvwrapper【原創】

    目錄 一、參考 二、概要 三、Virtualenv 優點 步驟 四、Virtualenvwrapper 優點 Windows下安裝步驟 Linux下安裝步驟 使用 五、Pycharm虛擬環境的使用 一、參考 聊聊 virtualenv 和 virtualenvwrapper 實踐 virtualenv 虛擬環境 virtualenv和virtualenvwrapper總結 Virtuanenv官方...

    Windows 使用virtualenv啟動Python腳本

    前言 本教程是在一個大佬的幫助下完成的,不敢居功。寫這篇文章的目的只是為了學習記錄和給其他有需要的朋友分享一下。 進入虛擬環境下的 Scripts 文件夾后直接運行 activate 就可以**虛擬環境,但是每次這要操作都很麻煩。我每天都要通過虛擬環境運行爬蟲腳本,好麻煩,如果能寫一個批處理文件,雙擊運行就好了。 方法 直接復制虛擬環境下的 activate 文件 在最后一行加入如下命令 如果不加...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    精品国产乱码久久久久久蜜桃不卡