在当今的容器化世界中,高效的后端应用程序部署至关重要。 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中文网其他相关文章!