mirror of
https://github.com/astral-sh/uv.git
synced 2025-07-08 05:45:00 +00:00

Some checks are pending
CI / Determine changes (push) Waiting to run
CI / lint (push) Waiting to run
CI / cargo clippy | ubuntu (push) Blocked by required conditions
CI / cargo clippy | windows (push) Blocked by required conditions
CI / cargo dev generate-all (push) Blocked by required conditions
CI / cargo shear (push) Waiting to run
CI / cargo test | ubuntu (push) Blocked by required conditions
CI / cargo test | macos (push) Blocked by required conditions
CI / cargo test | windows (push) Blocked by required conditions
CI / check windows trampoline | aarch64 (push) Blocked by required conditions
CI / check windows trampoline | i686 (push) Blocked by required conditions
CI / build binary | windows aarch64 (push) Blocked by required conditions
CI / check windows trampoline | x86_64 (push) Blocked by required conditions
CI / test windows trampoline | i686 (push) Blocked by required conditions
CI / test windows trampoline | x86_64 (push) Blocked by required conditions
CI / typos (push) Waiting to run
CI / mkdocs (push) Waiting to run
CI / check system | python on macos x86-64 (push) Blocked by required conditions
CI / build binary | linux libc (push) Blocked by required conditions
CI / build binary | linux musl (push) Blocked by required conditions
CI / build binary | macos aarch64 (push) Blocked by required conditions
CI / build binary | macos x86_64 (push) Blocked by required conditions
CI / build binary | windows x86_64 (push) Blocked by required conditions
CI / cargo build (msrv) (push) Blocked by required conditions
CI / build binary | freebsd (push) Blocked by required conditions
CI / ecosystem test | pydantic/pydantic-core (push) Blocked by required conditions
CI / ecosystem test | prefecthq/prefect (push) Blocked by required conditions
CI / integration test | pypy on ubuntu (push) Blocked by required conditions
CI / ecosystem test | pallets/flask (push) Blocked by required conditions
CI / smoke test | linux (push) Blocked by required conditions
CI / check system | alpine (push) Blocked by required conditions
CI / smoke test | macos (push) Blocked by required conditions
CI / smoke test | windows x86_64 (push) Blocked by required conditions
CI / smoke test | windows aarch64 (push) Blocked by required conditions
CI / integration test | conda on ubuntu (push) Blocked by required conditions
CI / integration test | deadsnakes python3.9 on ubuntu (push) Blocked by required conditions
CI / integration test | free-threaded on linux (push) Blocked by required conditions
CI / integration test | free-threaded on windows (push) Blocked by required conditions
CI / integration test | pypy on windows (push) Blocked by required conditions
CI / integration test | graalpy on ubuntu (push) Blocked by required conditions
CI / integration test | graalpy on windows (push) Blocked by required conditions
CI / integration test | github actions (push) Blocked by required conditions
CI / integration test | free-threaded python on github actions (push) Blocked by required conditions
CI / integration test | determine publish changes (push) Blocked by required conditions
CI / integration test | uv publish (push) Blocked by required conditions
CI / integration test | uv_build (push) Blocked by required conditions
CI / check cache | ubuntu (push) Blocked by required conditions
CI / check cache | macos aarch64 (push) Blocked by required conditions
CI / check system | python on debian (push) Blocked by required conditions
CI / check system | python on fedora (push) Blocked by required conditions
CI / check system | python on ubuntu (push) Blocked by required conditions
CI / check system | python on opensuse (push) Blocked by required conditions
CI / check system | python on rocky linux 8 (push) Blocked by required conditions
CI / check system | python on rocky linux 9 (push) Blocked by required conditions
CI / check system | pypy on ubuntu (push) Blocked by required conditions
CI / check system | pyston (push) Blocked by required conditions
CI / check system | python on macos aarch64 (push) Blocked by required conditions
CI / check system | homebrew python on macos aarch64 (push) Blocked by required conditions
CI / check system | python3.10 on windows x86-64 (push) Blocked by required conditions
CI / check system | python3.10 on windows x86 (push) Blocked by required conditions
CI / check system | python3.13 on windows x86-64 (push) Blocked by required conditions
CI / check system | x86-64 python3.13 on windows aarch64 (push) Blocked by required conditions
CI / check system | windows registry (push) Blocked by required conditions
CI / check system | python3.12 via chocolatey (push) Blocked by required conditions
CI / check system | python3.9 via pyenv (push) Blocked by required conditions
CI / check system | python3.13 (push) Blocked by required conditions
CI / check system | conda3.11 on macos aarch64 (push) Blocked by required conditions
CI / check system | conda3.8 on macos aarch64 (push) Blocked by required conditions
CI / check system | conda3.11 on linux x86-64 (push) Blocked by required conditions
CI / check system | conda3.8 on linux x86-64 (push) Blocked by required conditions
CI / check system | conda3.11 on windows x86-64 (push) Blocked by required conditions
CI / check system | conda3.8 on windows x86-64 (push) Blocked by required conditions
CI / check system | amazonlinux (push) Blocked by required conditions
CI / check system | embedded python3.10 on windows x86-64 (push) Blocked by required conditions
CI / benchmarks (push) Blocked by required conditions
<!-- Thank you for contributing to uv! To help us out with reviewing, please consider the following: - Does this pull request include a summary of the change? (See below.) - Does this pull request include a descriptive title? - Does this pull request include references to any relevant issues? --> ## Summary <!-- What's the purpose of the change? What does it do, and why? --> Incorrect use of the indefinite article- 'an project' instead of 'a project' ## Test Plan <!-- How was it tested? --> Was not tested due to it being a small change to docs wording without change in formatting.
136 lines
3.2 KiB
Markdown
136 lines
3.2 KiB
Markdown
---
|
|
title: Using uv with FastAPI
|
|
description:
|
|
A guide to using uv with FastAPI to manage Python dependencies, run applications, and deploy with
|
|
Docker.
|
|
---
|
|
|
|
# Using uv with FastAPI
|
|
|
|
[FastAPI](https://github.com/fastapi/fastapi) is a modern, high-performance Python web framework.
|
|
You can use uv to manage your FastAPI project, including installing dependencies, managing
|
|
environments, running FastAPI applications, and more.
|
|
|
|
!!! note
|
|
|
|
You can view the source code for this guide in the [uv-fastapi-example](https://github.com/astral-sh/uv-fastapi-example) repository.
|
|
|
|
## Migrating an existing FastAPI project
|
|
|
|
As an example, consider the sample application defined in the
|
|
[FastAPI documentation](https://fastapi.tiangolo.com/tutorial/bigger-applications/), structured as
|
|
follows:
|
|
|
|
```plaintext
|
|
project
|
|
└── app
|
|
├── __init__.py
|
|
├── main.py
|
|
├── dependencies.py
|
|
├── routers
|
|
│ ├── __init__.py
|
|
│ ├── items.py
|
|
│ └── users.py
|
|
└── internal
|
|
├── __init__.py
|
|
└── admin.py
|
|
```
|
|
|
|
To use uv with this application, inside the `project` directory run:
|
|
|
|
```console
|
|
$ uv init --app
|
|
```
|
|
|
|
This creates a [project with an application layout](../../concepts/projects/init.md#applications)
|
|
and a `pyproject.toml` file.
|
|
|
|
Then, add a dependency on FastAPI:
|
|
|
|
```console
|
|
$ uv add fastapi --extra standard
|
|
```
|
|
|
|
You should now have the following structure:
|
|
|
|
```plaintext
|
|
project
|
|
├── pyproject.toml
|
|
└── app
|
|
├── __init__.py
|
|
├── main.py
|
|
├── dependencies.py
|
|
├── routers
|
|
│ ├── __init__.py
|
|
│ ├── items.py
|
|
│ └── users.py
|
|
└── internal
|
|
├── __init__.py
|
|
└── admin.py
|
|
```
|
|
|
|
And the contents of the `pyproject.toml` file should look something like this:
|
|
|
|
```toml title="pyproject.toml"
|
|
[project]
|
|
name = "uv-fastapi-example"
|
|
version = "0.1.0"
|
|
description = "FastAPI project"
|
|
readme = "README.md"
|
|
requires-python = ">=3.12"
|
|
dependencies = [
|
|
"fastapi[standard]",
|
|
]
|
|
```
|
|
|
|
From there, you can run the FastAPI application with:
|
|
|
|
```console
|
|
$ uv run fastapi dev
|
|
```
|
|
|
|
`uv run` will automatically resolve and lock the project dependencies (i.e., create a `uv.lock`
|
|
alongside the `pyproject.toml`), create a virtual environment, and run the command in that
|
|
environment.
|
|
|
|
Test the app by opening http://127.0.0.1:8000/?token=jessica in a web browser.
|
|
|
|
## Deployment
|
|
|
|
To deploy the FastAPI application with Docker, you can use the following `Dockerfile`:
|
|
|
|
```dockerfile title="Dockerfile"
|
|
FROM python:3.12-slim
|
|
|
|
# Install uv.
|
|
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
|
|
|
|
# Copy the application into the container.
|
|
COPY . /app
|
|
|
|
# Install the application dependencies.
|
|
WORKDIR /app
|
|
RUN uv sync --frozen --no-cache
|
|
|
|
# Run the application.
|
|
CMD ["/app/.venv/bin/fastapi", "run", "app/main.py", "--port", "80", "--host", "0.0.0.0"]
|
|
```
|
|
|
|
Build the Docker image with:
|
|
|
|
```console
|
|
$ docker build -t fastapi-app .
|
|
```
|
|
|
|
Run the Docker container locally with:
|
|
|
|
```console
|
|
$ docker run -p 8000:80 fastapi-app
|
|
```
|
|
|
|
Navigate to http://127.0.0.1:8000/?token=jessica in your browser to verify that the app is running
|
|
correctly.
|
|
|
|
!!! tip
|
|
|
|
For more on using uv with Docker, see the [Docker guide](./docker.md).
|