uv icon indicating copy to clipboard operation
uv copied to clipboard

`uv sync` does not install a workspace member's dependency with extra

Open shunichironomura opened this issue 5 months ago • 1 comments

Context

Consider the following project structure where:

  • The root project is the workspace root with two members: a-lib and an-app
  • The root project has a-lib as a dependency
  • The a-lib library has an optional dependency network = ["httpx>=0.27.2"]
  • The an-app application has a dependency "a-lib[network]"
.
├── README.md
├── a-lib
│   ├── README.md
│   ├── pyproject.toml
│   └── src
│       └── a_lib
│           └── __init__.py
├── an-app
│   ├── app.py
│   └── pyproject.toml
├── hello.py
├── pyproject.toml
└── uv.lock

Expected behavior

  • uv sync should install httpx as:
    • httpx is in the network extra of a-lib
    • a-lib[network] is a dependency of an-app, which is a workspace member

Actual behavior

  • Running uv sync in the repository root does not install httpx.

Output of uv sync -v:

DEBUG uv 0.4.0
DEBUG Found project root: `/Users/nomura/tmp/uv-opt-dep`
DEBUG Found workspace root: `/Users/nomura/tmp/uv-opt-dep`
DEBUG Adding current workspace member: `/Users/nomura/tmp/uv-opt-dep`
DEBUG Adding discovered workspace member: `/Users/nomura/tmp/uv-opt-dep/a-lib`
DEBUG Adding discovered workspace member: `/Users/nomura/tmp/uv-opt-dep/an-app`
DEBUG Searching for Python >=3.12 in managed installations or system path
DEBUG Searching for managed installations at `/Users/nomura/Library/Application Support/uv/python`
DEBUG Found managed installation `cpython-3.12.5-macos-aarch64-none`
DEBUG Found `cpython-3.12.5-macos-aarch64-none` at `/Users/nomura/Library/Application Support/uv/python/cpython-3.12.5-macos-aarch64-none/bin/python3` (managed installations)
Using Python 3.12.5
Creating virtualenv at: .venv
DEBUG Using request timeout of 30s
DEBUG Acquired lock for `/Users/nomura/Library/Caches/uv/built-wheels-v3/editable/927367c801095033`
DEBUG Found static `pyproject.toml` for: a-lib @ file:///Users/nomura/tmp/uv-opt-dep/a-lib
DEBUG Found workspace root: `/Users/nomura/tmp/uv-opt-dep`
DEBUG Adding root workspace member: `/Users/nomura/tmp/uv-opt-dep`
DEBUG Adding current workspace member: `/Users/nomura/tmp/uv-opt-dep/a-lib`
DEBUG Adding discovered workspace member: `/Users/nomura/tmp/uv-opt-dep/an-app`
DEBUG Acquired lock for `/Users/nomura/Library/Caches/uv/built-wheels-v3/path/380ad038dfb54863`
DEBUG Found static `pyproject.toml` for: an-app @ file:///Users/nomura/tmp/uv-opt-dep/an-app
DEBUG Found workspace root: `/Users/nomura/tmp/uv-opt-dep`
DEBUG Adding root workspace member: `/Users/nomura/tmp/uv-opt-dep`
DEBUG Adding current workspace member: `/Users/nomura/tmp/uv-opt-dep/an-app`
DEBUG Adding discovered workspace member: `/Users/nomura/tmp/uv-opt-dep/a-lib`
DEBUG Acquired lock for `/Users/nomura/Library/Caches/uv/built-wheels-v3/path/f80ace0e74a88082`
DEBUG Found static `pyproject.toml` for: uv-opt-dep @ file:///Users/nomura/tmp/uv-opt-dep
DEBUG Found workspace root: `/Users/nomura/tmp/uv-opt-dep/`
DEBUG Adding current workspace member: `/Users/nomura/tmp/uv-opt-dep/`
DEBUG Adding discovered workspace member: `/Users/nomura/tmp/uv-opt-dep/a-lib`
DEBUG Adding discovered workspace member: `/Users/nomura/tmp/uv-opt-dep/an-app`
DEBUG Acquired lock for `/Users/nomura/Library/Caches/uv/built-wheels-v3/editable/927367c801095033`
DEBUG Found static `pyproject.toml` for: a-lib @ file:///Users/nomura/tmp/uv-opt-dep/a-lib
DEBUG Found workspace root: `/Users/nomura/tmp/uv-opt-dep`
DEBUG Adding root workspace member: `/Users/nomura/tmp/uv-opt-dep`
DEBUG Adding current workspace member: `/Users/nomura/tmp/uv-opt-dep/a-lib`
DEBUG Adding discovered workspace member: `/Users/nomura/tmp/uv-opt-dep/an-app`
DEBUG Existing `uv.lock` satisfies workspace requirements
Resolved 10 packages in 1ms
DEBUG Using request timeout of 30s
DEBUG Directory source requirement already cached: a-lib==0.1.0 (from file:///Users/nomura/tmp/uv-opt-dep/a-lib)
Installed 1 package in 0.78ms
 + a-lib==0.1.0 (from file:///Users/nomura/tmp/uv-opt-dep/a-lib)
  • If you remove the project.optional-dependencies section from a-lib/pyproject.toml and run uv add httpx --optional network, it will install httpx as expected. However, running uv sync will remove httpx again.

For reproduction

For reproduction, please follow the instruction on this repository: https://github.com/shunichironomura/uv-opt-dep

Environment

  • uv platform: macOS
  • uv version: uv 0.4.0 (d9bd3bc7a 2024-08-28)

shunichironomura avatar Aug 29 '24 09:08 shunichironomura