Dalam dunia kontena hari ini, penggunaan aplikasi bahagian belakang yang cekap adalah penting. FastAPI, rangka kerja Python yang popular, cemerlang dalam mencipta API yang pantas dan berprestasi tinggi. Kami akan menggunakan uv
, pengurus pakej, untuk menyelaraskan pengurusan pergantungan.
uv
Dengan mengandaikan anda telah memasang uv
dan Docker, mari buat apl kami: uv init simple-app
. Ini menjana:
<code>simple-app/ ├── .python-version ├── README.md ├── hello.py └── pyproject.toml</code>
pyproject.toml
memegang metadata projek:
<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>
Tambah kebergantungan projek pada 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>
Bahagian [tool.uv]
mentakrifkan kebergantungan pembangunan yang dikecualikan semasa penggunaan. Jalankan uv sync
ke:
uv.lock
..venv
). uv
memuat turun penterjemah Python jika perlu.FastAPI
Buat struktur aplikasi FastAPI:
<code>recipe-app/ ├── app/ │ ├── main.py │ ├── __init__.py │ └── ... ├── .python-version ├── README.md └── pyproject.toml</code>
Dalam 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>
Lari dengan: uv run fastapi dev app/main.py
. Anda akan melihat output yang serupa dengan:
Aksesnya di https://www.php.cn/link/c099034308f2a231c24281de338726c1.
Pelabuh
Jom Berlabuh. Kami akan membangunkan dalam bekas. Tambahkan 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>
Untuk pengurusan kontena yang lebih mudah, gunakan 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>
Buat fail .env
dengan pembolehubah persekitaran. Lari dengan: docker compose up --build
.
[tool.uv]
dan Alat Pembangunan
Bahagian [tool.uv]
dalam pyproject.toml
menyenaraikan alatan pembangunan:
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>
Tambah pyproject.toml
konfigurasi untuk mypy
dan ruff
(contoh disediakan dalam teks asal). Pasang sambungan VS Code Ruff untuk linting masa nyata. Persediaan ini memastikan gaya kod yang konsisten, semakan jenis dan semakan prakomit untuk aliran kerja yang diperkemas.
Atas ialah kandungan terperinci Bahagian belakang Python boleh skala: Membina Aplikasi FastAPI dalam kontena dengan uv, Docker dan prakomit: panduan langkah demi langkah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!