mirror of
				https://github.com/astral-sh/uv.git
				synced 2025-10-31 12:06:13 +00:00 
			
		
		
		
	 df35919d5a
			
		
	
	
		df35919d5a
		
			
		
	
	
	
		
			
	
		
	
	
		
			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).
 |