Skip to main content

Bash helpers for navigating and managing Python VirtualEnvs.

Project description

# Navigate and manage Python VirtualEnvs

The `envie` is an ultra lightweight set of Bash functions aiming to increase
your productivity when dealing with everyday VirtualEnv tasks, like: creating,
destroying, listing and switching environments.

## Summary

- `mkenv [<env>|"env"] [<pyexec>|"python"]` - Create virtualenv in `<env>` based on Python version `<pyexec>`.
- `rmenv` - Destroy the active environment.
- `cdenv` - Interactively activate the closest environment (looking down, then up, with `lsupenv`).
- `lsenv [<start>|"." [<avoid>]]` - List all environments below `<start>` directory, skipping `<avoid>` subdir.
- `lsupenv` - Find the closest environments by first looking down and then dir-by-dir up the tree, starting with cwd.
- `envie_install` - Run (once) to enable (faster) searches with `locate`.
- `envie_updatedb` - Run to re-index directories searched with `updatedb`.

## Examples

### Create/destroy

To create a new VirtualEnv in the current directory, just type `mkenv <envname>`.
This results with new environment created and activated in `./<envname>`.
When done with this environment, just type `rmenv` to destroy the active env.

```sh
stevie@caracal:~/demo$ ls
stevie@caracal:~/demo$ mkenv env
Creating python environment in 'env'.
Using Python 2.7.9 (/usr/bin/python).
(env)stevie@caracal:~/demo$ ls
env
(env)stevie@caracal:~/demo$ pip freeze
argparse==1.2.1
wsgiref==0.1.2
(env)stevie@caracal:~/demo$ rmenv
stevie@caracal:~/demo$ ls
stevie@caracal:~/demo$
```

### Change/activate environment

Use `cdenv` to activate the closest environment, tree-wise. We first look
down the tree, then up the tree. If a single Python environment is found,
it's automatically activated. In case the multiple environments are found,
a choice is presented to user.

```sh
stevie@caracal:~/demo$ ls -F
env/ project/ file1 file2 ...
stevie@caracal:~/demo$ cdenv
(env)stevie@caracal:~/demo$
```

Assume the following tree exists:
```
~/demo
|_ project1
| |_ env
| | |_ ...
| |_ src
| |_ ...
|_ project2
| |_ env
| |_ ...
```

Now, consider you work in `~/demo/project1/src/deep/path/to/module`, but keep the environment
in the `env` parallel to `src`. Instead of manually switching to `env` and activating it with
something like `source ../../../../../env/bin/activate`, just type `cdenv` (`cde<TAB>` should
actually do it, if you use tab completion):
```sh
stevie@caracal:~/demo/project1/src/deep/path/to/module$ cdenv
(env)stevie@caracal:~/demo/project1/src/deep/path/to/module$ which python
/home/stevie/demo/project1/env/bin/python
```

On the other hand, if there are multiple environments to choose from, you'll get a prompt:
```sh
stevie@caracal:~/demo$ cdenv
1) ./project1/env
2) ./project2/env
#? 2
(env)stevie@caracal:~/demo$ which python
/home/stevie/demo/project2/env/bin/python
```

### Search/list environments

To search down the tree for valid Python VirtualEnvs, use `lsenv`.
Likewise, to search up the tree, level by level, use `lsupenv`.
`cdenv` uses `lsupenv` when searching to environment to activate.

## Install

Clone the repo and source the `functions.sh` file from your `.bashrc`.

```
~$ git clone https://github.com/randomir/envie
~$ echo . ~/envie/functions.sh >> ~/.bashrc
```

### Enable the faster search

By default, `envie` uses the `find` command to search for environments. That approach is pretty fast when searching shallow trees. However, if you have a deeper directory trees, it's often faster to use a pre-built directory index (i.e. the `locate` command).
To enable a combined `locate/find` approach to search, run:

```
$ envie_install
Indexing environments in '/home/stevie'...Done.
```

In the combined approach, if `find` doesn't finish within 100ms, search via `find` is aborted and `locate` is allowed to finish (faster).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

envie-0.3.0.tar.gz (5.8 kB view details)

Uploaded Source

Built Distribution

envie-0.3.0-py2.py3-none-any.whl (7.6 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file envie-0.3.0.tar.gz.

File metadata

  • Download URL: envie-0.3.0.tar.gz
  • Upload date:
  • Size: 5.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for envie-0.3.0.tar.gz
Algorithm Hash digest
SHA256 e27c1a8eeef10ae41f3528d6363518004d8b8099dc7696f17f17d0dd3f9042b1
MD5 d9ea831e5e1ce9514c3201378f2cd34e
BLAKE2b-256 a648e04211a17482c954ec9f0f555e58efae97e9448d2940d1b3d74e4bf5c956

See more details on using hashes here.

File details

Details for the file envie-0.3.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for envie-0.3.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 6fcec606e646de1bd1d81628b55f54237177e0db43ae50e942e2da643e087c12
MD5 e3c8119ff95425fdc71cd9cd14aab482
BLAKE2b-256 57951c484dc7583cc817b723932c878d45f5a0af0aab35603748c6fe5d3e4916

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page