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.
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 subdirectorybatou_libin 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:
The generated pyproject.toml file, missing the editable path dependency:
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_libas 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:
Ideally,
appenv migrateshould print a clear warning or report an error if it encounters dependencies which it cannot handle automatically.