在當今的容器化世界中,高效的後端應用程式部署至關重要。 FastAPI 是一種流行的 Python 框架,擅長創建快速、高效能的 API。 我們將使用套件管理器 uv
來簡化依賴管理。
紫外線
假設您已經安裝了 uv
和 Docker,讓我們建立我們的應用程式:uv init simple-app
。這會產生:
<code>simple-app/ ├── .python-version ├── README.md ├── hello.py └── pyproject.toml</code>
pyproject.toml
儲存項目元資料:
<code class="language-toml">[project] name = "simple-app" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.11" dependencies = []</code>
將專案依賴項加入pyproject.toml
:
<code class="language-toml">dependencies = [ "fastapi[standard]=0.114.2", "python-multipart=0.0.7", "email-validator=2.1.0", "pydantic>2.0", "SQLAlchemy>2.0", "alembic=1.12.1", ] [tool.uv] dev-dependencies = [ "pytest=7.4.3", "mypy=1.8.0", "ruff=0.2.2", "pre-commit=4.0.0", ]</code>
[tool.uv]
部分定義了部署期間排除的開發依賴項。 運行 uv sync
到:
uv.lock
。 .venv
)。 uv
如果需要,下載 Python 解釋器。 FastAPI
建立 FastAPI 應用程式結構:
<code>recipe-app/ ├── app/ │ ├── main.py │ ├── __init__.py │ └── ... ├── .python-version ├── README.md └── pyproject.toml</code>
在app/main.py
中:
<code class="language-python">from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class Hello(BaseModel): message: str @app.get("/", response_model=Hello) async def hello() -> Hello: return Hello(message="Hi, I am using FastAPI")</code>
運行:uv run fastapi dev app/main.py
。 您將看到類似以下的輸出:
訪問https://www.php.cn/link/c099034308f2a231c24281de338726c1。
Docker
讓我們 Docker 化。我們將在容器內開發。 加入Dockerfile
:
<code class="language-dockerfile">FROM python:3.11-slim ENV PYTHONUNBUFFERED=1 COPY --from=ghcr.io/astral-sh/uv:0.5.11 /uv /uvx /bin/ ENV UV_COMPILE_BYTE=1 ENV UV_LINK_MODE=copy WORKDIR /app ENV PATH="/app/.venv/bin:$PATH" COPY ./pyproject.toml ./uv.lock ./.python-version /app/ RUN --mount=type=cache,target=/root/.cache/uv \ --mount=type=bind,source=uv.lock,target=uv.lock \ --mount=type=bind,source=pyproject.toml,target=pyproject.toml \ uv sync --frozen --no-install-project --no-dev COPY ./app /app/app RUN --mount=type=cache,target=/root/.cache/uv \ uv sync --frozen --no-dev CMD ["fastapi", "dev", "app/main.py", "--host", "0.0.0.0"]</code>
為了更輕鬆地管理容器,請使用 docker-compose.yaml
:
<code class="language-yaml">services: app: build: context: . dockerfile: Dockerfile working_dir: /app volumes: - ./app:/app/app ports: - "${APP_PORT:-8000}:8000" environment: - DATABASE_URL=${DATABASE_URL} depends_on: - postgres postgres: image: postgres:15 environment: POSTGRES_DB: ${POSTGRES_DB} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: - postgres_data:/var/lib/postgresql/data volumes: postgres_data: {}</code>
建立一個包含環境變數的.env
檔案。 運行:docker compose up --build
.
[tool.uv]
和開發工具
[tool.uv]
中的pyproject.toml
部分列出了開發工具:
uv run mypy app
..pre-commit-config.yaml
:<code class="language-yaml">repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.4.0 hooks: - id: check-added-large-files - id: check-toml - id: check-yaml args: - --unsafe - id: end-of-file-fixer - id: trailing-whitespace - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.8.6 hooks: - id: ruff args: [--fix] - id: ruff-format</code>
為pyproject.toml
和mypy
新增ruff
設定(原文提供範例)。 安裝 VS Code Ruff 擴充功能以進行即時 linting。 此設定可確保一致的程式碼風格、類型檢查和預提交檢查,以實現簡化的工作流程。
以上是可擴展的 Python 後端:使用 uv、Docker 和預先提交構建容器化 FastAPI 應用程式:逐步指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!