We want to share uv’s stance on this topic while the direction of the PEP is still under consideration.
Our goal with uv is to obviate the need for our users to directly interact with environments. Ideally, tools would ask uv (or another environment management tool) for a path to an environment that satisfies the user’s desired configuration (Python version, dependency groups, extras, and workspace package selection), so that a suitable environment can be located, created or synchronised on demand. We intend for uv-managed environments to be disposable and recreated as needed.
Since I appear to have misunderstood the options, I should clarify that our votes were for .venv as a directory or redirect file, a symlink thereto, or a junction to a directory, with .python-envs assumed to be a lower-priority source. Apologies for the misunderstanding.
We plan to support storing uv-managed environments outside project directories, using .venv symlinks or junctions as a compatibility mechanism for tools that do not yet integrate directly with uv. Some users already rely on .venv symlinks and junctions in their workflows, but support in downstream tools (e.g. editors) often appears accidental, which can lead to user-facing workflow issues, particularly around change detection. Standardising these forms of .venv would formalise existing practices and establish a clear expectation that tools support them, thus helping provide users with a more reliable experience.
Although uv will need to manage multiple environments per project, our users expect to use uv to specify their desired configuration rather than choose between those environments. The multi-environment solutions discussed here instead centre on providing other tools with a set of environments to select from. This environment-selection model is incompatible with uv’s workflow and risks giving our users a confusing, incoherent, and fragile experience. We would therefore not use .python-envs to enumerate uv-managed environments.
If we needed to use .python-envs for compatibility, we would have it refer to only one uv-managed environment at a time. Doing this with direct paths to our environments seems like it would be difficult to get right. Our idea would be to put (literally) .venv in there and maintain it as the last entry. This does not really improve our situation and seems undesirable in general.
In summary, we support standardising .venv as described above. However, we have reservations about the proposed approaches to handling multiple environments. We are not asking for this PEP to standardise uv’s declarative environment model; we ask only that it not hinder our ability to offer users a coherent and reliable experience.
We would also be happy to participate in further discussion to find a solution that addresses a broader set of needs with fewer compromises.