venv-wrapper is a convenient wrapper around Python's venv module. It was inspired by the
virtualenvwrapper project,
and it aims to be simpler and more convenient to use.
Installation
Cargo and crates.io
- Install rust (https://www.rust-lang.org/tools/install).
- Add the
cargobin path to yourPATHenvironment variable.- Usually the bin path is
~/.cargo/bin.
- Usually the bin path is
- Run
cargo install venv-wrapper. - Add
eval "$(venv-wrapper init)"to your shell init script (~/.bashrc,~/.zshrc, etc.) - Restart your shell.
- You can now run
venv lsto verify the installation is working.
AUR, PPA, Homebrew
Coming soon!
Configuration
It's possible to configure venv-wrapper with either a configuration file, environment variables, or CLI flags.
-
~/.config/venv-wrapper/config.toml- All paths in the config file must be absolute.
= "/home/username/.a-different-venvs-directory" -
VENVWRAPPER_VENVS_DIR=~/.a-different-venvs-directory venv ls- Paths do not need to be absolute with environment variables.
-
venv -d ~/.a-different-venvs-directory venv ls- Paths do not need to be absolute with CLI flags.
Available Configuration Values
venvs_dir: The directory in which to store all virtualenvs.
Shell Compatibility
Currently, only sh, bash and zsh have been tested and confirmed to work. However, fish
support should be comming soon!
UTF-8
Any path to a virtualenv (including the virtualenv name itself) must be valid UTF-8 because paths and virtualenv names are printed to the terminal (and writing invalid UTF-8 to the terminal wouldn't really be all that useful).
Though, since emojis are valid UTF-8, feel free to use them in your virtualenv names! 🚀
Missing Features
In its current state, this project does not quite match the features of virtualenvwrapper. The
missing features are as follows :
- Copy virtualenvs
- Tab completion of virtualenv names
- Customizable hooks
- A plugin system to create shareable extensions
Releasing Versions
To release a new version, there a few simple steps to follow.
- Create or edit the
RELEASE_CHANGELOG.mdfile (at the repo's root) to contain a changelog for the release.- This will be the GitHub release's body
- Upadte the version in
cargo.toml,cargo.lock, andclap_app.rs. - Merge all code to be released into
main. - Create a new tag pointing to the head of the
mainbranch.git tag -s vX.Y.Z -m "Release vX.Y.Z"
- Push the new tag.
git push --tags