一、FastAPI和Uvicorn簡介¶
在Python Web開發領域,FastAPI是近年來非常流行的高性能Web框架,它基於標準Python類型提示,支持異步操作,且自動生成API文檔,開發效率極高。而Uvicorn是一個輕量級的ASGI(異步服務器網關接口)服務器,專爲高性能Python Web應用設計,也是FastAPI官方推薦的服務器之一。
簡單來說,FastAPI負責定義API接口邏輯,Uvicorn負責接收請求、處理併發並返回響應。兩者搭配使用,既能快速開發,又能穩定部署。
二、環境安裝¶
1. 創建虛擬環境(推薦)¶
爲避免依賴衝突,建議先創建虛擬環境:
# 創建虛擬環境
python -m venv venv
# 激活虛擬環境(Windows)
venv\Scripts\activate
# 激活虛擬環境(Mac/Linux)
source venv/bin/activate
2. 安裝FastAPI和Uvicorn¶
在激活的虛擬環境中執行:
pip install fastapi uvicorn
安裝完成後,可通過 pip list 驗證是否成功安裝。
三、本地開發環境配置¶
1. 編寫第一個FastAPI應用¶
創建一個名爲 main.py 的文件,寫入以下代碼:
from fastapi import FastAPI
# 初始化FastAPI應用
app = FastAPI()
# 定義一個根路由("/"),返回JSON數據
@app.get("/")
def read_root():
return {"message": "Hello, FastAPI+Uvicorn!"}
# 定義一個帶參數的路由(如"/items/123")
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "query": q}
2. 用Uvicorn啓動應用¶
在終端執行以下命令啓動服務器:
uvicorn main:app --reload
- 參數說明:
main:app:表示從main.py文件中導入app對象(即FastAPI實例)。--reload:開發模式下自動重載代碼(修改後無需手動重啓)。
3. 驗證接口是否運行¶
啓動成功後,終端會顯示類似信息:
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [12345]
此時可通過以下方式測試接口:
- 瀏覽器訪問:打開 http://127.0.0.1:8000,頁面會顯示 {"message": "Hello, FastAPI+Uvicorn!"}。
- 調用帶參數接口:訪問 http://127.0.0.1:8000/items/456?query=test,返回 {"item_id": 456, "query": "test"}。
四、生產環境部署基礎¶
本地開發用 --reload 方便調試,但生產環境需關閉自動重載並優化配置。
1. 基礎部署命令¶
直接使用Uvicorn啓動(無需自動重載):
uvicorn main:app --host 0.0.0.0 --port 8000
- 參數說明:
--host 0.0.0.0:允許外部設備訪問(默認僅本地127.0.0.1訪問)。--port 8000:指定端口(可改爲其他端口,如80需管理員權限)。
2. 多進程部署(提升性能)¶
若服務器有多個CPU核心,可通過 --workers 參數啓動多進程:
uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4
--workers 4:啓動4個工作進程(建議設置爲CPU核心數的2倍)。
3. 部署到服務器(如阿里雲/騰訊雲)¶
- 上傳代碼:將
main.py和虛擬環境上傳到服務器(或直接在服務器內創建)。 - 啓動應用:在服務器終端執行部署命令(需確保服務器開放對應端口,如8000)。
- 後臺運行:若需長期運行,可結合
nohup或systemd管理進程:
# 使用nohup後臺運行
nohup uvicorn main:app --host 0.0.0.0 --port 8000 &
五、常見問題與解決¶
1. 端口被佔用怎麼辦?¶
- 檢查佔用進程:
lsof -i :8000(Mac/Linux)或netstat -ano | findstr :8000(Windows)。 - 修改端口:執行
uvicorn main:app --port 8001,更換爲未佔用的端口。
2. 訪問不到接口?¶
- 確認host參數:確保
--host 0.0.0.0而非127.0.0.1(本地迴環地址僅允許本機訪問)。 - 檢查防火牆:服務器需開放對應端口(如8000),可通過
ufw allow 8000(Ubuntu)開放端口。
3. 安裝失敗?¶
- 更新pip:
pip install --upgrade pip。 - 確認Python版本:FastAPI要求Python 3.6+,建議使用Python 3.9+。
六、總結¶
FastAPI+Uvicorn的本地開發與部署流程核心步驟:
1. 開發:用 uvicorn main:app --reload 快速調試接口。
2. 部署:用 uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4 啓動生產環境。
通過本文,你已掌握基礎配置和常見問題處理。後續可探索FastAPI的異步接口、數據庫集成或Uvicorn的高級參數(如SSL證書配置)。
動手實踐:嘗試修改 main.py 添加新接口,或部署到雲服務器,體驗完整開發流程吧!