Skip to main content

Bash helpers for navigating and managing Python VirtualEnvs.

Project description

At its core, envie is a set of Bash functions aiming to increase your productivity when dealing with mundane VirtualEnv tasks, like: creating, destroying, listing, switching and activating environments.

But envie really shines when it comes to auto-discovery and auto-activation of VirtualEnvs relevant to your project (or executable). Just say:

~/work/projectA$ envie python tests.py

~/work/projectB$ envie manage.py migrate

~$ envie run python -c 'import os; print(os.getenv("VIRTUAL_ENV"))'

or use it in a hash bang:

#!/usr/bin/env envie

or, just import it at the beginning of your Python program:

#!/usr/bin/python
import envie.require

and in each of these cases the Python script will be executed in the closest virtual environment (for the definition of the closest environment see below, section Change/activate environment).

To just activate the closest virtual env, just type envie:

~/work/my-project-awesome$ envie

or even:

$ envie project awesome

(keywords filter all virtual envs in vicinity and activate the best match - if unique)

Summary

  • envie create / mkenv [-2|-3|-p <pyexec>] [-r <pip_req>] [-a] [-t] [<envdir>] -- [virtualenv opts] - Create virtualenv in <env> based on Python version <pyexec>, optionally install Pip packages from <pip_req> requirements file.

  • envie remove / rmenv - Destroy the active environment.

  • envie go / chenv [-1] [-q] [-v] [<keywords>] - Interactively activate the closest environment (looking down, then up, with lsupenv), optionally filtered by a list of <keywords>.

  • envie list / lsenv [-f|-l] [<dir>|"." [<avoid>]] - List all environments below <dir> directory, skipping <avoid> subdir.

  • envie find / lsupenv [-f|-l] [<dir>|"."] - Find the closest environments by first looking down and then dir-by-dir up the tree, starting with <dir>.

  • cdenv - cd to the base dir of the currently active virtualenv ($VIRTUAL_ENV).

  • envie [<keywords>] - Activate the closest virtual environment (relative to cwd, filtered by KEYWORDS), but only if it’s unambiguous; shortcut for envie go -1 -v <keywords>.

  • envie python <script>, envie <script> - Run python script in the closest virtual environment.

  • envie run <command> - Execute arbitrary command/builtin/file/alias/function in the closest virtual environment.

  • envie index - (Re-)index virtual environments (for faster searches with locate).

  • envie config - Interactively configure envie.

  • envie help - Print usage help. For details on a specific command use the ‘-h’ switch (like envie go -h).

Install

For convenience, envie is packaged and distributed as a Python package. To install, simply type:

$ sudo pip install envie
$ envie config

# start clean
$ . ~/.bashrc   # or, open a new shell

The second line above will run a short configuration/setup procedure. If in doubt, go with the defaults.

By default, envie sourcing statement is added to your .bashrc file, locate index is set as a preferred source (it’s set to be rebuilt every 15m, or on demand), with all relevant environments’ ancestor dir set to your $HOME directory.

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.

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$

Create Python 3 environment in env and install pip packages from requirements.txt:

$ mkenv3 -r requirements.txt

Change/activate environment

Use chenv 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.

stevie@caracal:~/demo$ ls -F
env/ project/ file1 file2 ...
stevie@caracal:~/demo$ chenv
(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 chenv (che<TAB> should actually do it, if you use tab completion):

stevie@caracal:~/demo/project1/src/deep/path/to/module$ chenv
(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:

stevie@caracal:~/demo$ chenv
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. chenv uses lsupenv when searching for environment to activate.

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.4.16.tar.gz (14.8 kB view details)

Uploaded Source

Built Distribution

envie-0.4.16-py2.py3-none-any.whl (20.2 kB view details)

Uploaded Python 2 Python 3

File details

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

File metadata

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

File hashes

Hashes for envie-0.4.16.tar.gz
Algorithm Hash digest
SHA256 710f96c368c77ef7fccfed0b18e0e7a187b258d46bf3ef0b53b2a8487b07962b
MD5 e1f4892782b39a97ba741a33f9b567a4
BLAKE2b-256 84336633c335c4075f5e03ee259b7f0547bb93a776df849acd10a87335a7f3c8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for envie-0.4.16-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 0080504f03e7ad822e57425f005007bf8089db926f5db180fae51ed8f3296a2a
MD5 d015fbf2a1586776d6e17ab9d710079d
BLAKE2b-256 1eb3ad3dc5e52008418d8140b46168e6990a50083b142ffd23a7d698616bfe0d

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