uv/crates/uv-virtualenv
Brendan cbcf51391f
fix: refresh activation scripts from upstream virtualenv (#15272)
## Summary
This refreshes the venv activation scripts from upstream `virtualenv`
project.
This was largely triggered by a problem in the activate.nu script (for
nushell):
- #14888 
- #14914 
- #14917 

I was careful to respect the git history going back to astral-sh/uv#3376
(the last time this was done).
Actually I looked at the complete history from back when this
`uv-virtualenv` crate was named after a Pokémon (⁉️), but I found
nothing (about activation scripts) from back then that hasn't been
overwritten since.

### Some post-processing was involved

- Retained license info at top of scripts
- Retained template vars (eg `{{ BIN_PATH }}`) to assure current support
toward relocatable venv
- Retained deviation from upstream in astral-sh/uv#5640. This seems to
be the only deviation that isn't in sync with upstream.

### Notable changes from upstream

- (omitted due to undesirable complexity) pypa/virtualenv#2928 and its
follow-up pypa/virtualenv#2940
- pypa/virtualenv#2910 (what prompted astral-sh/uv#14917 from
astral-sh/uv#14888)

## Test Plan

There was a request in #14917 to add unit tests to detect breakage or
errors.
I have added a CI job that runs the nushell activation script.
But I think it is better to have the CI test all/most supported shells.
See also #15294 

I have tested this locally using

- [x] nushell (v0.106.1)
- [x] cmd.exe (Microsoft Windows [Version 10.0.26100.4946])
- [x] bash in WSL (GNU bash, version 5.1.16(1)-release
(x86_64-pc-linux-gnu))
- [x] pwsh (PSVersion 5.1.26100.4768)
2025-09-05 16:12:37 -05:00
..
src fix: refresh activation scripts from upstream virtualenv (#15272) 2025-09-05 16:12:37 -05:00
Cargo.toml Move preview features into a dedicated crate (#15482) 2025-08-24 09:55:30 -04:00
README.md fix: refresh activation scripts from upstream virtualenv (#15272) 2025-09-05 16:12:37 -05:00

README.md

uv-virtualenv

uv-virtualenv is a rust library to create Python virtual environments. It also has a CLI.

Syncing with upstream virtualenv activation scripts

This crate tries to stay in sync with pypa/virtualenv project's activation scrips. However, there are some deviations that are specific to this crate's implementation.

License disclaimers added

This crate includes license information at the top of each activation script. This is done in accordance with the pypa/virtualenv project's MIT License. Do not remove the declarative license comments from this crate's activation scripts.

Placeholder names are slightly different

Note, these activation scripts are actually templates that are populated with certain values when a virtual environment is created.

In upstream, the placeholder names are found in virtualenv.activation.ViaTemplateActivator.replacements().

In this crate, the placeholder names are found in uv_virtualenv::virtualenv::create()

It is important that the placeholder names (as used in the activation scripts) conform to the placeholders names used in this crate's source.

Relocatable virtual environments

This crate uses some additional tweaks in the activation scripts to ensure the virtual environment is relocatable. Thus, the patch in astral-sh/uv#5640 shall be retained.

TCL/TK library locations

The patches in upstream virtualenv (pypa/virtualenv#2928 and pypa/virtualenv#2940) implement dynamically locating the TCL/TK libraries of a base Python distribution (see upstream approach).

This upstream implementation is considered an undesirable complexity in this project. As such, the upstream TCL/TK related patches shall be omitted when syncing activation scripts with upstream sources.