Skip to content

uv migration command ignores editable path dependencies #64

Description

@sysvinit

I have a batou repo which uses appenv for virtualenv management which has a nested Python library containing various utility functions. This is a design pattern which is explicitly discussed in the batou documentation for managing reusable components without having to indirect through batou.c. This extension module is stored in the subdirectory batou_lib in the repository, and declared in the requirements.txt file as an editable path dependency as -e ./batou_lib.

I then updated the version of appenv in this repo today to 2026.6.30 using uvx appenv migrate, which converted the requirements.txt to a pyproject.toml with a uv lock file. However, the editable path dependency in the requirements.txt was ignored and not included in the generated pyproject.toml – this meant the generated virtualenv was missing dependencies which are required by the batou deployment.

The full requirements.txt file:

# appenv-python-preference: 3.13, 3.12, 3.11
batou ~= 2.7.0
dnslib
construct
libnacl

# remember to sync dependencies in setup.py
-e ./batou_lib

The generated pyproject.toml file, missing the editable path dependency:

[project]
name = "deployment"
version = "0.1.0"
description = "Migrated Appenv project"
dependencies = [
    "batou ~= 2.7.0",
    "dnslib",
    "construct",
    "libnacl",
]
requires-python = ">=3.11,<3.14"

I had to search through the uv documentation to work out how to specify editable path dependencies by hand; relevant pages are here and here. I had to add additional configuration to declare batou_lib as a workspace member an additional source path, and convert the extension module's setup.py file to a further pyproject.toml.

The corrected pyproject.toml file:

[project]
name = "deployment"
version = "0.1.0"
description = "Migrated Appenv project"
dependencies = [
    "batou ~= 2.7.0",
    "dnslib",
    "construct",
    "libnacl",
    "batou-lib",
]
requires-python = ">=3.11,<3.14"

[tool.uv.workspace]
members = [
    "batou_lib",
]

[tool.uv.sources]
batou-lib = { workspace = true }

Ideally, appenv migrate should print a clear warning or report an error if it encounters dependencies which it cannot handle automatically.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions