iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0
Modern Web

FastAPI 如何 Fast ? 框架入門、實例、重構與測試系列 第 2

[Day02] FastAPI 啟動: 環境安裝

  • 分享至 

  • xImage
  •  

[Day02] FastAPI 啟動: 環境安裝

這次需要安裝的套件有

  • fastapi
  • uvicorn

環境安裝

如果要在 local 直接安裝套件,雖然可以直接使用 pip3 安裝
( 但非常不建議這樣做! )

pip3 install fastapi

這邊想要提供一個更好的環境管理方式
使用 poetry 來管理環境
或是使用 venv 在虛擬環境中安裝

可以避免在開發時,全域環境中的套件版本相依性的 error !

poetry

poetry 是一個 python 的 dependency manager
( 可以在官方安裝教學中找到安裝方式 )
poetry 也會順邊幫我們創建一個虛擬環境

安裝 fastapi 和 uvicorn

  1. 快速安裝
    如果已經在專案目錄中 ,可以使用以下指令安裝 fastapiuvicorn
poetry init -n
poetry add fastapi
poetry add uvicorn
  1. 互動式安裝
    不加上 -n 參數,會進入互動式安裝
poetry init

應該會跳出以下畫面
接者在 package name 輸入 fastapiuvicorn

啟用虛擬環境

如果要進入 poetry 的虛擬環境
需使用 poetry shell 指令

或是使用 poetry run 指令
以虛擬環境執行 python 檔案 ( 但不會進入虛擬環境 )

poetry run python3 main.py

venv

如果不想使用 poetry ,可以使用 python 內建的 venv

創建虛擬環境

python3 -m venv venv

會在當前目錄下創建一個 venv 資料夾
一般會將 venv 加入 .gitignore

啟用虛擬環境

如果要離開虛擬環境,可以使用 deactivate 指令

source venv/bin/activate

安裝 fastapi 和 uvicorn

pip3 install fastapi
pip3 install uvicorn

什麼是 Uvicorn ?

uvicorn 是一個 ASGI server
( ASGI 是一個 python 的 async server gateway interface )
FastAPI 也是使用 uvicorn 來啟動 server

安裝完 uvicorn 之後,可以使用以下指令來啟動 server

uvicorn <path_to_your_app>:<app_object_name> --host <host> --port <port>

如果有一下的檔案結構

.
└── main.py

main.py 中有一個 my_app instance

from fastapi import FastAPI

my_app = FastAPI()

@my_app.get("/")
def root():
    return {"message": "Hello World"}

並且要跑在 0.0.0.08000 port 上
可以使用以下指令來啟動 server

uvicorn main:my_app --host 0.0.0.0 --port 8000
# 如果已經有在虛擬環境中

poetry run uvicorn main:my_app --host 0.0.0.0 --port 8000
# 如果有使用 poetry 但沒有進入虛擬環境

Summary

這次的環境安裝,可以使用 poetry 或是 venv

  • poetry
    • 使用 poetry shell 進入虛擬環境
    • 一搬會將 poetry.lock 加入 .gitignore
  • venv
    • 使用 source venv/bin/activate 進入虛擬環境
    • 一搬會將整個 venv 目錄加入 .gitignore
Reference

Install Poetry
Poetry tutorial
Python venv
Python venv tutorial


上一篇
[Day01] FastAPI 推坑與框架的朋友們
下一篇
[Day03] FastAPI 設定與 Uvicorn 包裝
系列文
FastAPI 如何 Fast ? 框架入門、實例、重構與測試31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言