ホームページ >バックエンド開発 >Python チュートリアル >スケーラブルな Python バックエンド: uv、Docker、プリコミットを使用したコンテナ化された FastAPI アプリケーションの構築: ステップバイステップ ガイド
今日のコンテナ化された世界では、効率的なバックエンド アプリケーションの展開が非常に重要です。人気の Python フレームワークである FastAPI は、高速で高性能な 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 インタープリターをダウンロードします。高速API
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 からアクセスします。
ドッカー
Dockerize をしましょう。コンテナ内で開発します。 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
構成を追加します (例は元のテキストに示されています)。 リアルタイム lint のために VS Code Ruff 拡張機能をインストールします。 この設定により、一貫したコード スタイル、型チェック、およびコミット前チェックが保証され、効率化されたワークフローが実現します。
以上がスケーラブルな Python バックエンド: uv、Docker、プリコミットを使用したコンテナ化された FastAPI アプリケーションの構築: ステップバイステップ ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。