Venver

Automatically activate, and deactivate virutal environments when entering or leaving directories.

Installation

curl -LsSf https://codeberg.org/narvin/venver/raw/branch/main/bin/install.sh | sh

Once finished, the installation script will print additional instructions to configure your shell.

Usage

Let’s assume you have a python project with a virtual environment like this:

~/
├─ myapp/
│  ├─ .venv/
│  │   ...
│  ├─ src/
│  │   ...
│  ├─ .gitignore
│  ├─ pyproject.toml
│  ├─ README.rst

Add a .venver file to the project root.

cd ~/myapp
echo './.venv' > .venver
~/
├─ myapp/
│  ├─ .venv/
│  │   ...
│  ├─ src/
│  │   ...
│  ├─ .gitignore
│  ├─ .venver
│  ├─ pyproject.toml
│  ├─ README.rst

Navigating anywhere inside the myapp directory will result in the environment at myapp/.venv being activated. And navigating outside of myapp will deactivate the environment.

~ $ cd myapp
~/myapp (.venv) $ cd src
~/myapp/src (.venv) $ cd ~
~ $ cd myapp/src
~/myapp/src (.venv) $

If you manually deactivate the environment, it won’t be automatically activated again until you navigate outside of myapp, then reenter it.

~ $ cd myapp
~/myapp (.venv) $ deactivate
~/myapp $ cd src
~/myapp/src $ cd ~
~ $ cd myapp
~/myapp (.venv) $

You may specify an environment that isn’t in the project directory. This is useful if you have environments you want to reuse. The activation, and deactivation will still be relative to the .venver directory, and not the environment directory.

~/
├─ venvs/
│  ├─ web-venv/
│  │   ...
│  ├─ console-venv/
│  │   ...
cd ~/myapp
echo '~/venvs/web-venv' > .venver
~ $ cd myapp
~/myapp (web-venv) $ cd src
~/myapp/src (web-venv) $ cd ~
~ $ cd myapp/src
~/myapp/src (web-venv) $

API