Skip to main content

Bash helpers for navigating and managing Python VirtualEnvs.

Project description

https://img.shields.io/pypi/v/envie.svg https://img.shields.io/badge/platform-GNU/Linux,%20BSD-red.svg https://img.shields.io/badge/shell-bash-blue.svg https://img.shields.io/pypi/pyversions/envie.svg https://api.travis-ci.org/randomir/envie.svg?branch=master

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, auto-activation and auto-creation 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.activate_closest

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-cattoy$ envie

or even:

$ envie awesome toy

(keywords filter all virtual envs in vicinity and activate the best match - if unique; if not unique you’re prompted to select the exact environment you wish to activate)

Summary

  • envie / chenv [-1] [-f|-l] [-q] [-v] [<basedir>] [<keywords>] - Interactively activate the closest environment (looking down, then up, with findenv), optionally filtered by a list of <keywords>. Start looking in <basedir> (defaults to .).

  • envie create / mkenv [-2|-3|-e <pyexec>] [-r <pip_req>] [-p <pip_pkg>] [-a] [<envdir> | -t] -- [virtualenv opts] - Create virtualenv in <envdir> (or in temporary dir, -t) based on Python version <pyexec>, optionally install Pip packages from <pip_req> requirements file and <pip_pkg> package specifier.

  • envie remove / rmenv - Destroy the active environment.

  • envie list / lsenv [-f|-l] [<dir>] [<keywords>] - List all environments below <dir> directory, optionally filtered by a list of <keywords>.

  • envie find / findenv [-f|-l] [<dir>] [<keywords>] - Find the closest environments by first looking down and then dir-by-dir up the tree, starting in <dir>; optionally filtered by a list of <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 config - Interactively configure envie.

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

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

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

Install & configure

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

After install, be sure to run a (short and interactive) configuration procedure with envie config. 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.

Testing

Run all test suites locally with:

$ make test

(after cloning the repo.)

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

Create a throw-away environment with a pre-installed dev-requirements.txt and a local project in editable mode from /home/stevie/work/mypackage/:

$ mkenv -t -r dev-requirements.txt -p "-e /home/stevie/work/mypackage/"

To automate the previous example, you can use envie-oneoff command in your hashbang, like this:

#!/usr/bin/env envie-oneoff
# -*- requirements: ./path/to/my/requirements.txt -*-

<your python code here>

When executed, a throw-away virtualenv is created, requirements specified are installed inside, code is run, and the environment is destroyed afterwards. Other way to do it is directly: envie-oneoff SCRIPT.

Change/activate environment

Use envie (base command), or the explicit 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$ envie
(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 envie (or chenv):

stevie@caracal:~/demo/project1/src/deep/path/to/module$ envie
(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$ envie
1) ./project1/env
2) ./project2/env
3) ./projectx/env
#? 2
(env)stevie@caracal:~/demo$ which python
/home/stevie/demo/project2/env/bin/python

If you know the name of your project (some specific path components – keywords), you can preemptively filter, and auto-activate the project environment with:

stevie@caracal:~/demo$ envie x
(env)stevie@caracal:~/demo$ which python
/home/stevie/demo/projectx/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 findenv. chenv uses findenv when searching for environment to activate.

Suppose in your work directory you have projects named trusty and zesty. And for both of them you keep dev and prod env:

$ lsenv dev

./work/trusty/dev
./work/zesty/dev

or to activate trusty dev, all you need to type is:

$ envie t d

Activated virtual environment at './work/trusty/dev'.

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

Uploaded Source

Built Distribution

envie-0.4.29-py2.py3-none-any.whl (30.1 kB view details)

Uploaded Python 2 Python 3

File details

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

File metadata

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

File hashes

Hashes for envie-0.4.29.tar.gz
Algorithm Hash digest
SHA256 916a9c4df98c74d47427ae88ee3d4ae2425985d9540e2066555fee00e12c07a7
MD5 e4227f289df4b6c3a07b344818a06fa2
BLAKE2b-256 ec6acda922bf76f4480609c9cc086a70f38197f3fab030b10c2e03d182bc8e5b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for envie-0.4.29-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 89ba6a82165fc97a04e5577c3b3a5ebe05eb98ed24c8c9c459f5d41099f53f93
MD5 7c3a52047875b3077249037d1af8a97d
BLAKE2b-256 78c9e42ae96f4237c10c26baf8b174f703e77b6d254e3656e88d99982f82a8b6

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