mirror of
https://github.com/astral-sh/uv.git
synced 2025-07-14 08:45:01 +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 / 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 / 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 / build binary | windows aarch64 (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 / ecosystem test | pallets/flask (push) Blocked by required conditions
CI / smoke test | linux (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 ubuntu (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 | determine publish changes (push) Blocked by required conditions
CI / integration test | uv publish (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 | alpine (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 | python on macos x86-64 (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 | 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
## Summary It turns out activating the kernel does not change `VIRTUAL_ENV`, so we still install into the environment the Jupyter environment, rather than the project environment. Unfortunately, after this change, we do still show a warning on `uv add`: ``` warning: `VIRTUAL_ENV=/Users/crmarsh/.cache/uv/archive-v0/3bddKDdYXuX2w57Fu6itL` does not match the project environment path `.venv` and will be ignored ``` `uv pip install` works without warning. Closes #11154.
170 lines
6.5 KiB
Markdown
170 lines
6.5 KiB
Markdown
---
|
|
title: Using uv with Jupyter
|
|
description:
|
|
A complete guide to using uv with Jupyter notebooks for interactive computing, data analysis, and
|
|
visualization, including kernel management and virtual environment integration.
|
|
---
|
|
|
|
# Using uv with Jupyter
|
|
|
|
The [Jupyter](https://jupyter.org/) notebook is a popular tool for interactive computing, data
|
|
analysis, and visualization. You can use Jupyter with uv in a few different ways, either to interact
|
|
with a project, or as a standalone tool.
|
|
|
|
## Using Jupyter within a project
|
|
|
|
If you're working within a [project](../../concepts/projects/index.md), you can start a Jupyter
|
|
server with access to the project's virtual environment via the following:
|
|
|
|
```console
|
|
$ uv run --with jupyter jupyter lab
|
|
```
|
|
|
|
By default, `jupyter lab` will start the server at
|
|
[http://localhost:8888/lab](http://localhost:8888/lab).
|
|
|
|
Within a notebook, you can import your project's modules as you would in any other file in the
|
|
project. For example, if your project depends on `requests`, `import requests` will import
|
|
`requests` from the project's virtual environment.
|
|
|
|
If you're looking for read-only access to the project's virtual environment, then there's nothing
|
|
more to it. However, if you need to install additional packages from within the notebook, there are
|
|
a few extra details to consider.
|
|
|
|
### Creating a kernel
|
|
|
|
If you need to install packages from within the notebook, we recommend creating a dedicated kernel
|
|
for your project. Kernels enable the Jupyter server to run in one environment, with individual
|
|
notebooks running in their own, separate environments.
|
|
|
|
In the context of uv, we can create a kernel for a project while installing Jupyter itself in an
|
|
isolated environment, as in `uv run --with jupyter jupyter lab`. Creating a kernel for the project
|
|
ensures that the notebook is hooked up to the correct environment, and that any packages installed
|
|
from within the notebook are installed into the project's virtual environment.
|
|
|
|
To create a kernel, you'll need to install `ipykernel` as a development dependency:
|
|
|
|
```console
|
|
$ uv add --dev ipykernel
|
|
```
|
|
|
|
Then, you can create the kernel for `project` with:
|
|
|
|
```console
|
|
$ uv run ipython kernel install --user --env VIRTUAL_ENV $(pwd)/.venv --name=project
|
|
```
|
|
|
|
From there, start the server with:
|
|
|
|
```console
|
|
$ uv run --with jupyter jupyter lab
|
|
```
|
|
|
|
When creating a notebook, select the `project` kernel from the dropdown. Then use `!uv add pydantic`
|
|
to add `pydantic` to the project's dependencies, or `!uv pip install pydantic` to install `pydantic`
|
|
into the project's virtual environment without persisting the change to the project `pyproject.toml`
|
|
or `uv.lock` files. Either command will make `import pydantic` work within the notebook.
|
|
|
|
### Installing packages without a kernel
|
|
|
|
If you don't want to create a kernel, you can still install packages from within the notebook.
|
|
However, there are a few caveats to consider.
|
|
|
|
Though `uv run --with jupyter` runs in an isolated environment, within the notebook itself,
|
|
`!uv add` and related commands will modify the _project's_ environment, even without a kernel.
|
|
|
|
For example, running `!uv add pydantic` from within a notebook will add `pydantic` to the project's
|
|
dependencies and virtual environment, such that `import pydantic` will work immediately, without
|
|
further configuration or a server restart.
|
|
|
|
However, since the Jupyter server is the "active" environment, `!uv pip install` will install
|
|
package's into _Jupyter's_ environment, not the project environment. Such dependencies will persist
|
|
for the lifetime of the Jupyter server, but may disappear on subsequent `jupyter` invocations.
|
|
|
|
If you're working with a notebook that relies on pip (e.g., via the `%pip` magic), you can include
|
|
pip in your project's virtual environment by running `uv venv --seed` prior to starting the Jupyter
|
|
server. For example, given:
|
|
|
|
```console
|
|
$ uv venv --seed
|
|
$ uv run --with jupyter jupyter lab
|
|
```
|
|
|
|
Subsequent `%pip install` invocations within the notebook will install packages into the project's
|
|
virtual environment. However, such modifications will _not_ be reflected in the project's
|
|
`pyproject.toml` or `uv.lock` files.
|
|
|
|
## Using Jupyter as a standalone tool
|
|
|
|
If you ever need ad hoc access to a notebook (i.e., to run a Python snippet interactively), you can
|
|
start a Jupyter server at any time with `uv tool run jupyter lab`. This will run a Jupyter server in
|
|
an isolated environment.
|
|
|
|
## Using Jupyter with a non-project environment
|
|
|
|
If you need to run Jupyter in a virtual environment that isn't associated with a
|
|
[project](../../concepts/projects/index.md) (e.g., has no `pyproject.toml` or `uv.lock`), you can do
|
|
so by adding Jupyter to the environment directly. For example:
|
|
|
|
=== "macOS and Linux"
|
|
|
|
```console
|
|
$ uv venv --seed
|
|
$ uv pip install pydantic
|
|
$ uv pip install jupyterlab
|
|
$ .venv/bin/jupyter lab
|
|
```
|
|
|
|
=== "Windows"
|
|
|
|
```powershell
|
|
uv venv --seed
|
|
uv pip install pydantic
|
|
uv pip install jupyterlab
|
|
.venv\Scripts\jupyter lab
|
|
```
|
|
|
|
From here, `import pydantic` will work within the notebook, and you can install additional packages
|
|
via `!uv pip install`, or even `!pip install`.
|
|
|
|
## Using Jupyter from VS Code
|
|
|
|
You can also engage with Jupyter notebooks from within an editor like VS Code. To connect a
|
|
uv-managed project to a Jupyter notebook within VS Code, we recommend creating a kernel for the
|
|
project, as in the following:
|
|
|
|
```console
|
|
# Create a project.
|
|
$ uv init project
|
|
|
|
# Move into the project directory.
|
|
$ cd project
|
|
|
|
# Add ipykernel as a dev dependency.
|
|
$ uv add --dev ipykernel
|
|
|
|
# Open the project in VS Code.
|
|
$ code .
|
|
```
|
|
|
|
Once the project directory is open in VS Code, you can create a new Jupyter notebook by selecting
|
|
"Create: New Jupyter Notebook" from the command palette. When prompted to select a kernel, choose
|
|
"Python Environments" and select the virtual environment you created earlier (e.g.,
|
|
`.venv/bin/python` on macOS and Linux, or `.venv\Scripts\python` on Windows).
|
|
|
|
!!! note
|
|
|
|
VS Code requires `ipykernel` to be present in the project environment. If you'd prefer to avoid
|
|
adding `ipykernel` as a dev dependency, you can install it directly into the project environment
|
|
with `uv pip install ipykernel`.
|
|
|
|
If you need to manipulate the project's environment from within the notebook, you may need to add
|
|
`uv` as an explicit development dependency:
|
|
|
|
```console
|
|
$ uv add --dev uv
|
|
```
|
|
|
|
From there, you can use `!uv add pydantic` to add `pydantic` to the project's dependencies, or
|
|
`!uv pip install pydantic` to install `pydantic` into the project's virtual environment without
|
|
updating the project's `pyproject.toml` or `uv.lock` files.
|