Venv

Overview

Venv makes working with Virtualenvwrapper, Bash, Vim, and IPython within a project context very easy.

There are a few parts to “venv”:

Quickstart

# print shell configuration for a (hypothetical) dotfiles virtualenv
venv --print-bash dotfiles

# print shell configuration for the current ${VIRTUAL_ENV} [and ${_WRD}]
venv --print-bash -E

# run a bash subprocess within a virtual env
venv -xb dotfiles

# workon a virtualenvwrapper virtualenv (we) (source <(venv -E --bash))
we dotfiles

# workon ${WORKON_HOME}/dotfiles/src/otherproject (echo $_APP $_WRD)
we dotfiles otherproject

Usage

__WRK="~/-wrk"                                # cdwrk # workspace
__DOTFILES="~/-dotfiles"                      # cdd cddotfiles
PROJECT_HOME="${__WRK}"                       # cdph cdprojecthome
WORKON_HOME="${__WRK}/-ve27"                  # cdwh cdworkonhome

__VENV=$(which venv.py);
# ${__DOTFILES}/src/dotfiles/venv/ipython_config.py  # source
# ${__DOTFILES}/etc/ipython/ipython_config.py        # symlink
# ~/.ipython/profile_default/ipython_config.py       # symlink
# ${__DOTFILES}/scripts/venv.py                      # symlink ($PATH)
# ${VIRTUAL_ENV}/bin/venv                      # setup.py console_script
# ~/.local/bin/venv                            # setup.py console_script

__VENV="${__DOTFILES}/scripts/venv.py"               # 10-bashrc.venv.sh
# venv()                 -- (set -x; $__VENV $@)     # 10-bashrc.venv.sh
# venv-()                -- (set -x; $__VENV -e $@)  # 10-bashrc.venv.sh

$__VENV --help
venv.py --help
venv -h

# Generate venv CdAlias scripts
venv.py --print-bash-cdalias . | tee venv_cdalias.sh
venv.py --print-ipython-cdalias . | tee venv_cdmagic.py
venv.py --print-vim . | tee venv.vim

# Generate venv configuration for the "dotfiles" virtualenv
venv.py --print-vars --VIRTUAL_ENV="${WORKON_HOME}/dotfiles"
venv.py --print-vars --virtual-env="${WORKON_HOME}/dotfiles"
venv.py --print-vars --ve="${WORKON_HOME}/dotfiles"
venv.py --print-vars --ve dotfiles
venv.py --print-vars dotfiles
venv.py --print-vars dotfiles
venv.py --print-bash dotfiles

## Workon the dotfiles virtualenv
source <(venv.py -q --print-bash dotfiles)

## Workon the dotfiles virtualenv (with a bash subprocess)
venv.py -xb dotfiles

## Workon the dotfiles virtualenv (after virtualenvwrapper workon)
workon dotfiles
source <(venv.py -q --print-bash --from-environ)


## Note: the following two commands are different to argparse:
## (positional VENVSTR and VENVSTRAPP must come last,
##  or be specified as --ve and --app)
venv dotfiles --print-bash        # does not work
venv --print-bash dotfiles        # does work

CdAlias

Each CdAlias in env.aliases is expanded for each output type.

For example, CdAlias('__WRK') becomes cdwrk, %cdwrk, and :Cdwrk:

# Bash
cdwrk
cdwrk<tab>
cdwrk -ve27

# IPython
%cdwrk
cdwrk
cdwrk -ve27

# Vim
call Cd___WRK()
:Cdwrk
:Cdwrk -ve27

Usage

Shell Command

$ python ../src/dotfiles/venv/ipython_config.py --help
usage: venv [-h] [-e] [--__WRK [__WRK]] [--__DOTFILES [__DOTFILES]]
            [--WORKON_HOME [WORKON_HOME]] [--VENVSTR [VENVSTR_]]
            [--VENVSTRAPP [VENVSTRAPP_]]
            [--VIRTUAL_ENV_NAME [VIRTUAL_ENV_NAME]]
            [--VENVPREFIX [VENVPREFIX]] [--VIRTUAL_ENV [VIRTUAL_ENV]]
            [--_SRC [_SRC]] [--_APP [_APP]] [--_WRD [_WRD]]
            [--platform PLATFORM] [--print-json]
            [--print-json-filename [PRINT_JSON_FILENAME]] [--print-vars]
            [--print-bash] [--print-bash-filename [PRINT_BASH_FILENAME]]
            [--print-bash-cdalias]
            [--print-bash-cdalias-filename [PRINT_BASH_CDALIAS_FILENAME]] [-Z]
            [--print-zsh-filename [PRINT_ZSH_FILENAME]] [--print-vim-cdalias]
            [--print-vim-cdalias-filename [PRINT_VIM_CDALIAS_FILENAME]]
            [--command RUN_COMMAND] [--run-bash] [--run-make] [--run-editp]
            [--run-terminal] [--pathall] [--pwrk PATH__WRK]
            [--pworkonhome PATH_WORKON_HOME] [--pvirtualenv] [--psrc] [--pwrd]
            [--pdotfiles] [--prel] [--pkg-resource-path] [--diff] [-v] [-q]
            [-t] [--version]
            [VENVSTR] [VENVSTRAPP] ...

venv is a configuration utility for virtual environments.

positional arguments:
  VENVSTR               a name of a virtualenv in WORKON_HOME OR a full path
                        to a VIRTUAL_ENV
  VENVSTRAPP            a path within _SRC (_WRD=_SRC/VENVSTRAPP)
  args

optional arguments:
  -h, --help            show this help message and exit
  -e, --from-environ    Build venv.env.environ from keys in os.environ
  --__WRK [__WRK], --WRK [__WRK], --wrk [__WRK]
                        Path to workspace -- ~/-wrk
  --__DOTFILES [__DOTFILES], --DOTFILES [__DOTFILES], --dotfiles [__DOTFILES]
                        Path to ${__DOTFILES} symlink -- ~/-dotfiles
  --WORKON_HOME [WORKON_HOME], --workonhome [WORKON_HOME], --wh [WORKON_HOME]
                        Path to ${WORKON_HOME} directory containing
                        VIRTUAL_ENVs
  --VENVSTR [VENVSTR_], --venvstr [VENVSTR_], --ve [VENVSTR_]
                        Path to VIRTUAL_ENV --
                        ${WORKON_HOME}/${VIRTUAL_ENV_NAME} (or a dirname in
                        $WORKON_HOME)
  --VENVSTRAPP [VENVSTRAPP_], --venvstrapp [VENVSTRAPP_]
                        Subpath within {VIRTUAL_ETC}/src/
  --VIRTUAL_ENV_NAME [VIRTUAL_ENV_NAME], --virtual-env-name [VIRTUAL_ENV_NAME], --vename [VIRTUAL_ENV_NAME]
                        dirname in WORKON_HOME --
                        ${WORKON_HOME}/${VIRTUAL_ENV_NAME}
  --VENVPREFIX [VENVPREFIX], --venvprefix [VENVPREFIX], --prefix [VENVPREFIX]
                        Prefix for _SRC, _ETC, _WRD if [ -z VIRTUAL_ENV ]
  --VIRTUAL_ENV [VIRTUAL_ENV], --virtual-env [VIRTUAL_ENV]
                        Path to a $VIRTUAL_ENV
  --_SRC [_SRC], --SRC [_SRC], --src [_SRC]
                        Path to source -- ${VIRTUAL_ENV}/src")
  --_APP [_APP], --APP [_APP], --app [_APP]
                        Path component string -- ${_SRC}/${_APP}
  --_WRD [_WRD], --WRD [_WRD], --wrd [_WRD]
                        Path to working directory -- ${_SRC}/${_APP}
  --platform PLATFORM   Platform string (default: None)
  --print-json          Print venv configuration as JSON
  --print-json-filename [PRINT_JSON_FILENAME]
                        Path to write venv env JSON to
  --print-vars          Print vars
  --print-bash, --bash  Print Bash shell configuration
  --print-bash-filename [PRINT_BASH_FILENAME], --bf [PRINT_BASH_FILENAME]
                        Path to write Bash shell configuration into
  --print-bash-cdalias, --bash-cdalias
                        Print Bash cdalias script
  --print-bash-cdalias-filename [PRINT_BASH_CDALIAS_FILENAME], --bcdf [PRINT_BASH_CDALIAS_FILENAME]
                        Path to write Bash cdalias shell configuration into
  -Z, --print-zsh       Print ZSH shell configuration
  --print-zsh-filename [PRINT_ZSH_FILENAME], --zf [PRINT_ZSH_FILENAME]
                        Print ZSH shell configuration
  --print-vim-cdalias, --vim
                        Print vimscript configuration
  --print-vim-cdalias-filename [PRINT_VIM_CDALIAS_FILENAME], --vcdf [PRINT_VIM_CDALIAS_FILENAME]
                        Path to write cdalias vimscript into
  --command RUN_COMMAND, --cmd RUN_COMMAND, -x RUN_COMMAND
                        Run a command in a venv-configured shell
  --run-bash, --xbash, -xb
                        Run bash in the specified venv
  --run-make, --xmake, -xmake
                        Run (cd $_WRD; make $@) in the specified venv
  --run-editp, --open-editors, --edit, -E
                        Open $EDITOR_ with venv.project_files [$PROJECT_FILES]
  --run-terminal, --open-terminals, --terminals, -T
                        Open terminals within the venv [gnome-terminal]
  --pathall, -a, --all-paths, --ap
                        Print possible paths for the given path
  --pwrk PATH__WRK, --wrk-path PATH__WRK
                        Print $__WRK/$@
  --pworkonhome PATH_WORKON_HOME, --workonhome-path PATH_WORKON_HOME, --pwh PATH_WORKON_HOME
                        Print $__WORKON_HOME/$@
  --pvirtualenv, --virtualenv-path, --pv
                        Print $VIRTUAL_ENV/${@}
  --psrc, --src-path, --ps
                        Print $_SRC/${@}
  --pwrd, --wrd-path, --pw
                        Print $_WRD/${@}
  --pdotfiles, --dotfiles-path, --pd
                        Print ${__DOTFILES}/${path}
  --prel, --relative-path
                        Print ${@}
  --pkg-resource-path   Path from pkg_resources.TODOTODO
  --diff, --show-diffs
  -v, --verbose
  -q, --quiet
  -t, --test
  --version

argparse.REMAINDER: If args must be specified, either (VENVSTR AND VENVSTRAPP)
or (--ve [--app]) must be specified first: venv --ve dotfiles -xmake.

Python API

Python API (see Test_Env, Test_venv_main): A dotfiles.venv.ipython_config.Venv object builds a dotfiles.venv.ipython_config.Env OrderedDict (.env) with $VIRTUAL_ENV-relative paths and environment variables in a common filesystem hierarchy and an OrderedDict of command aliases (.aliases), which can be serialized to a bash script (venv --bash), JSON (venv --print), and IPython configuration.

Example Venv Configuration

Shell Configuration

venv.py --print-bash dotfiles:

$ python ../scripts/venv.py --print-bash dotfiles \
| sed "s,${HOME},~,g"
export VENVSTR='dotfiles'
export VIRTUAL_ENV='~/-wrk/-ve27/dotfiles'
export WORKON_HOME='~/-wrk/-ve27'
export _APP='dotfiles'
export VENVSTRAPP='dotfiles'
export VENVPREFIX='~/-wrk/-ve27/dotfiles'
export VIRTUAL_ENV_NAME='dotfiles'
export HOME='~'
export __WRK='~/-wrk'
export __SRC='~/-wrk/-src'
export __DOTFILES='~/-dotfiles'
export PROJECT_HOME='~/-wrk'
export WORKON_HOME__py27='~/-wrk/-ve27'
export WORKON_HOME__py34='~/-wrk/-ve34'
export WORKON_HOME_DEFAULT='WORKON_HOME__py27'
export _ETC='~/-wrk/-ve27/dotfiles/etc'
export _SRC='~/-wrk/-ve27/dotfiles/src'
export _WRD='~/-wrk/-ve27/dotfiles/src/dotfiles'
export CONDA27_ROOT='~/-wrk/-conda27'
export CONDA27_HOME='~/-wrk/-ce27'
export CONDA34_ROOT='~/-wrk/-conda34'
export CONDA34_HOME='~/-wrk/-ce34'
export CONDA_ROOT__py27='~/-wrk/-conda27'
export CONDA_HOME__py27='~/-wrk/-ce27'
export CONDA_ROOT__py34='~/-wrk/-conda34'
export CONDA_HOME__py34='~/-wrk/-ce27'
export CONDA_ROOT_DEFAULT='CONDA_ROOT__py27'
export CONDA_HOME_DEFAULT='CONDA_HOME__py27'
export CONDA_ROOT='~/-wrk/-conda27'
export CONDA_HOME='~/-wrk/-ce27'
export _BIN='~/-wrk/-ve27/dotfiles/bin'
export _ETCOPT='~/-wrk/-ve27/dotfiles/etc/opt'
export _HOME='~/-wrk/-ve27/dotfiles/home'
export _LIB='~/-wrk/-ve27/dotfiles/lib'
export _PYLIB='~/-wrk/-ve27/dotfiles/lib/python2.7'
export _PYSITE='~/-wrk/-ve27/dotfiles/lib/python2.7/site-packages'
export _MNT='~/-wrk/-ve27/dotfiles/mnt'
export _MEDIA='~/-wrk/-ve27/dotfiles/media'
export _OPT='~/-wrk/-ve27/dotfiles/opt'
export _ROOT='~/-wrk/-ve27/dotfiles/root'
export _SBIN='~/-wrk/-ve27/dotfiles/sbin'
export _SRV='~/-wrk/-ve27/dotfiles/srv'
export _TMP='~/-wrk/-ve27/dotfiles/tmp'
export _USR='~/-wrk/-ve27/dotfiles/usr'
export _USRBIN='~/-wrk/-ve27/dotfiles/usr/bin'
export _USRINCLUDE='~/-wrk/-ve27/dotfiles/usr/include'
export _USRLIB='~/-wrk/-ve27/dotfiles/usr/lib'
export _USRLOCAL='~/-wrk/-ve27/dotfiles/usr/local'
export _USRSBIN='~/-wrk/-ve27/dotfiles/usr/sbin'
export _USRSHARE='~/-wrk/-ve27/dotfiles/usr/share'
export _USRSRC='~/-wrk/-ve27/dotfiles/usr/src'
export _VAR='~/-wrk/-ve27/dotfiles/var'
export _VARCACHE='~/-wrk/-ve27/dotfiles/var/cache'
export _VARLIB='~/-wrk/-ve27/dotfiles/var/lib'
export _VARLOCK='~/-wrk/-ve27/dotfiles/var/lock'
export _LOG='~/-wrk/-ve27/dotfiles/var/log'
export _VARMAIL='~/-wrk/-ve27/dotfiles/var/mail'
export _VAROPT='~/-wrk/-ve27/dotfiles/var/opt'
export _VARRUN='~/-wrk/-ve27/dotfiles/var/run'
export _VARSPOOL='~/-wrk/-ve27/dotfiles/var/spool'
export _VARTMP='~/-wrk/-ve27/dotfiles/var/tmp'
export _WWW='~/-wrk/-ve27/dotfiles/var/www'
export PROJECT_FILES=''
export VIMBIN='/usr/bin/vim'
export GVIMBIN=None
export MVIMBIN=None
export GUIVIMBIN=None
export VIMCONF='--servername dotfiles'
export _EDIT_='/usr/bin/vim -f'
export EDITOR_='/usr/bin/vim -f'
export _NOTEBOOKS='~/-wrk/-ve27/dotfiles/src/notebooks'
export _IPYSESKEY='~/-wrk/-ve27/dotfiles/src/.ipyseskey'
export _IPQTLOG='~/-wrk/-ve27/dotfiles/.ipqt.log'
export _WRD_SETUPY='~/-wrk/-ve27/dotfiles/src/dotfiles/setup.py'
export _TEST_='(cd "${_WRD}" && python "${_WRD_SETUPY}" test)'
export _CFG='~/-wrk/-ve27/dotfiles/etc/development.ini'
export _EDITCFG_='/usr/bin/vim -f ~/-wrk/-ve27/dotfiles/etc/development.ini'
export _SHELL_='(cd "${_WRD}" && "${_BIN}"/pshell "${_CFG}")'
export _SERVE_='(cd "${_WRD}" && "${_BIN}"/pserve --app-name=main --reload --monitor-restart "${_CFG}")'
export _SVCFG='~/-wrk/-ve27/dotfiles/etc/supervisord.conf'
export _SVCFG_=' -c "~/-wrk/-ve27/dotfiles/etc/supervisord.conf"'
export __USRLOG='~/-usrlog.log'
export _USRLOG='~/-wrk/-ve27/dotfiles/-usrlog.log'
export _TERM_ID=''
eval '
cdhome () {
    # cdhome()  -- cd HOME /$@
    cd "$HOME"/$@
}
_cd_HOME_complete () {
    local cur="$2";
    COMPREPLY=($(cdhome && compgen -d -- "${cur}" ))
}
cdh () {
    # cdh() -- cd $HOME
    cdhome $@
}
complete -o default -o nospace -F _cd_HOME_complete cdhome
complete -o default -o nospace -F _cd_HOME_complete cdh

';
eval '
cdwrk () {
    # cdwrk()  -- cd __WRK /$@
    cd "$__WRK"/$@
}
_cd___WRK_complete () {
    local cur="$2";
    COMPREPLY=($(cdwrk && compgen -d -- "${cur}" ))
}
complete -o default -o nospace -F _cd___WRK_complete cdwrk

';
eval '
cddotfiles () {
    # cddotfiles()  -- cd __DOTFILES /$@
    cd "$__DOTFILES"/$@
}
_cd___DOTFILES_complete () {
    local cur="$2";
    COMPREPLY=($(cddotfiles && compgen -d -- "${cur}" ))
}
cdd () {
    # cdd() -- cd $__DOTFILES
    cddotfiles $@
}
complete -o default -o nospace -F _cd___DOTFILES_complete cddotfiles
complete -o default -o nospace -F _cd___DOTFILES_complete cdd

';
eval '
cdprojecthome () {
    # cdprojecthome()  -- cd PROJECT_HOME /$@
    cd "$PROJECT_HOME"/$@
}
_cd_PROJECT_HOME_complete () {
    local cur="$2";
    COMPREPLY=($(cdprojecthome && compgen -d -- "${cur}" ))
}
cdp () {
    # cdp() -- cd $PROJECT_HOME
    cdprojecthome $@
}
cdph () {
    # cdph() -- cd $PROJECT_HOME
    cdprojecthome $@
}
complete -o default -o nospace -F _cd_PROJECT_HOME_complete cdprojecthome
complete -o default -o nospace -F _cd_PROJECT_HOME_complete cdp
complete -o default -o nospace -F _cd_PROJECT_HOME_complete cdph

';
eval '
cdworkonhome () {
    # cdworkonhome()  -- cd WORKON_HOME /$@
    cd "$WORKON_HOME"/$@
}
_cd_WORKON_HOME_complete () {
    local cur="$2";
    COMPREPLY=($(cdworkonhome && compgen -d -- "${cur}" ))
}
cdwh () {
    # cdwh() -- cd $WORKON_HOME
    cdworkonhome $@
}
cdve () {
    # cdve() -- cd $WORKON_HOME
    cdworkonhome $@
}
complete -o default -o nospace -F _cd_WORKON_HOME_complete cdworkonhome
complete -o default -o nospace -F _cd_WORKON_HOME_complete cdwh
complete -o default -o nospace -F _cd_WORKON_HOME_complete cdve

';
eval '
cdcondahome () {
    # cdcondahome()  -- cd CONDA_HOME /$@
    cd "$CONDA_HOME"/$@
}
_cd_CONDA_HOME_complete () {
    local cur="$2";
    COMPREPLY=($(cdcondahome && compgen -d -- "${cur}" ))
}
cda () {
    # cda() -- cd $CONDA_HOME
    cdcondahome $@
}
cdce () {
    # cdce() -- cd $CONDA_HOME
    cdcondahome $@
}
complete -o default -o nospace -F _cd_CONDA_HOME_complete cdcondahome
complete -o default -o nospace -F _cd_CONDA_HOME_complete cda
complete -o default -o nospace -F _cd_CONDA_HOME_complete cdce

';
eval '
cdvirtualenv () {
    # cdvirtualenv()  -- cd VIRTUAL_ENV /$@
    cd "$VIRTUAL_ENV"/$@
}
_cd_VIRTUAL_ENV_complete () {
    local cur="$2";
    COMPREPLY=($(cdvirtualenv && compgen -d -- "${cur}" ))
}
cdv () {
    # cdv() -- cd $VIRTUAL_ENV
    cdvirtualenv $@
}
complete -o default -o nospace -F _cd_VIRTUAL_ENV_complete cdvirtualenv
complete -o default -o nospace -F _cd_VIRTUAL_ENV_complete cdv

';
eval '
cdsrc () {
    # cdsrc()  -- cd _SRC /$@
    cd "$_SRC"/$@
}
_cd__SRC_complete () {
    local cur="$2";
    COMPREPLY=($(cdsrc && compgen -d -- "${cur}" ))
}
cds () {
    # cds() -- cd $_SRC
    cdsrc $@
}
complete -o default -o nospace -F _cd__SRC_complete cdsrc
complete -o default -o nospace -F _cd__SRC_complete cds

';
eval '
cdwrd () {
    # cdwrd()  -- cd _WRD /$@
    cd "$_WRD"/$@
}
_cd__WRD_complete () {
    local cur="$2";
    COMPREPLY=($(cdwrd && compgen -d -- "${cur}" ))
}
cdw () {
    # cdw() -- cd $_WRD
    cdwrd $@
}
complete -o default -o nospace -F _cd__WRD_complete cdwrd
complete -o default -o nospace -F _cd__WRD_complete cdw

';
eval '
cdbin () {
    # cdbin()  -- cd _BIN /$@
    cd "$_BIN"/$@
}
_cd__BIN_complete () {
    local cur="$2";
    COMPREPLY=($(cdbin && compgen -d -- "${cur}" ))
}
cdb () {
    # cdb() -- cd $_BIN
    cdbin $@
}
complete -o default -o nospace -F _cd__BIN_complete cdbin
complete -o default -o nospace -F _cd__BIN_complete cdb

';
eval '
cdetc () {
    # cdetc()  -- cd _ETC /$@
    cd "$_ETC"/$@
}
_cd__ETC_complete () {
    local cur="$2";
    COMPREPLY=($(cdetc && compgen -d -- "${cur}" ))
}
cde () {
    # cde() -- cd $_ETC
    cdetc $@
}
complete -o default -o nospace -F _cd__ETC_complete cdetc
complete -o default -o nospace -F _cd__ETC_complete cde

';
eval '
cdlib () {
    # cdlib()  -- cd _LIB /$@
    cd "$_LIB"/$@
}
_cd__LIB_complete () {
    local cur="$2";
    COMPREPLY=($(cdlib && compgen -d -- "${cur}" ))
}
cdl () {
    # cdl() -- cd $_LIB
    cdlib $@
}
complete -o default -o nospace -F _cd__LIB_complete cdlib
complete -o default -o nospace -F _cd__LIB_complete cdl

';
eval '
cdlog () {
    # cdlog()  -- cd _LOG /$@
    cd "$_LOG"/$@
}
_cd__LOG_complete () {
    local cur="$2";
    COMPREPLY=($(cdlog && compgen -d -- "${cur}" ))
}
complete -o default -o nospace -F _cd__LOG_complete cdlog

';
eval '
cdpylib () {
    # cdpylib()  -- cd _PYLIB /$@
    cd "$_PYLIB"/$@
}
_cd__PYLIB_complete () {
    local cur="$2";
    COMPREPLY=($(cdpylib && compgen -d -- "${cur}" ))
}
complete -o default -o nospace -F _cd__PYLIB_complete cdpylib

';
eval '
cdpysite () {
    # cdpysite()  -- cd _PYSITE /$@
    cd "$_PYSITE"/$@
}
_cd__PYSITE_complete () {
    local cur="$2";
    COMPREPLY=($(cdpysite && compgen -d -- "${cur}" ))
}
cdsitepackages () {
    # cdsitepackages() -- cd $_PYSITE
    cdpysite $@
}
complete -o default -o nospace -F _cd__PYSITE_complete cdpysite
complete -o default -o nospace -F _cd__PYSITE_complete cdsitepackages

';
eval '
cdvar () {
    # cdvar()  -- cd _VAR /$@
    cd "$_VAR"/$@
}
_cd__VAR_complete () {
    local cur="$2";
    COMPREPLY=($(cdvar && compgen -d -- "${cur}" ))
}
complete -o default -o nospace -F _cd__VAR_complete cdvar

';
eval '
cdwww () {
    # cdwww()  -- cd _WWW /$@
    cd "$_WWW"/$@
}
_cd__WWW_complete () {
    local cur="$2";
    COMPREPLY=($(cdwww && compgen -d -- "${cur}" ))
}
cdww () {
    # cdww() -- cd $_WWW
    cdwww $@
}
complete -o default -o nospace -F _cd__WWW_complete cdwww
complete -o default -o nospace -F _cd__WWW_complete cdww

';
eval 'cdhelp () {
    set | grep "^cd.*()" | cut -f1 -d" " #$@
}';
eval 'edit- () {
    ${_EDIT_} $@
}';
alias gvim-='/usr/bin/vim -f'
eval 'ipskey () {
    (python -c "import os; print os.urandom(128).encode(\"base64\")" > "${_IPYSESKEY}" ) && chmod 0600 "${_IPYSESKEY}"; # $@
}';
eval 'ipnb () {
    ipython notebook --secure --Session.keyfile="${_IPYSESKEY}" --notebook-dir="${_NOTEBOOKS}" --deep-reload $@
}';
eval 'ipqt () {
    ipython qtconsole --secure --Session.keyfile="${_IPYSESKEY}" --logappend="${_IPQTLOG}" --deep-reload --pprint --colors=linux --ConsoleWidget.font_family="Monaco" --ConsoleWidget.font_size=11 $@
}';
eval 'grinv () {
    grin --follow $@ "${VIRTUAL_ENV}"
}';
eval 'grindv () {
    grind --follow $@ --dirs "${VIRTUAL_ENV}"
}';
eval 'grins () {
    grin --follow $@ "${_SRC}"
}';
eval 'grinds () {
    grind --follow $@ --dirs "${_SRC}"
}';
alias test-='(cd "${_WRD}" && python "${_WRD_SETUPY}" test)'
alias testr-='reset && (cd "${_WRD}" && python "${_WRD_SETUPY}" test)'
alias nose-='(cd "${_WRD}" && nosetests)'
eval 'grinw () {
    grin --follow $@ "${_WRD}"
}';
eval 'grin- () {
    grin --follow $@ "${_WRD}"
}';
eval 'grindw () {
    grind --follow $@ --dirs "${_WRD}"
}';
eval 'grind- () {
    grind --follow $@ --dirs "${_WRD}"
}';
alias hgv-='hg view -R "${_WRD}"'
alias hgl-='hg -R "${_WRD}" log'
eval 'editcfg () {
    "${_EDITCFG_}" $@
}';
alias serve-='(cd "${_WRD}" && "${_BIN}"/pserve --app-name=main --reload --monitor-restart "${_CFG}")'
alias shell-='(cd "${_WRD}" && "${_BIN}"/pshell "${_CFG}")'
eval 'e () {
    ${_EDIT_} $@
}';
eval 'editp () {
    $GUIVIMBIN $VIMCONF $PROJECT_FILES $@
}';
eval 'makewrd () {
    (cd "${_WRD}" && make $@)
}';
eval 'make- () {
    (cd "${_WRD}" && make $@)
}';
eval 'mw () {
    (cd "${_WRD}" && make $@)
}';
alias ssv='supervisord -c "${_SVCFG}"'
alias sv='supervisorctl -c "${_SVCFG}"'
alias svt='sv tail -f'
alias svd='supervisorctl -c "${_SVCFG}" restart dev && supervisorctl -c "${_SVCFG}" tail -f dev'

JSON Configuration

venv.py --print-json dotfiles:

$ python ../scripts/venv.py --print-json dotfiles \
| sed "s,${HOME},~,g"
{
    "env": {
        "environ": {
            "VENVSTR": "dotfiles", 
            "VIRTUAL_ENV": "~/-wrk/-ve27/dotfiles", 
            "WORKON_HOME": "~/-wrk/-ve27", 
            "_APP": "dotfiles", 
            "VENVSTRAPP": "dotfiles", 
            "VENVPREFIX": "~/-wrk/-ve27/dotfiles", 
            "VIRTUAL_ENV_NAME": "dotfiles", 
            "HOME": "~", 
            "__WRK": "~/-wrk", 
            "__SRC": "~/-wrk/-src", 
            "__DOTFILES": "~/-dotfiles", 
            "PROJECT_HOME": "~/-wrk", 
            "WORKON_HOME__py27": "~/-wrk/-ve27", 
            "WORKON_HOME__py34": "~/-wrk/-ve34", 
            "WORKON_HOME_DEFAULT": "WORKON_HOME__py27", 
            "_ETC": "~/-wrk/-ve27/dotfiles/etc", 
            "_SRC": "~/-wrk/-ve27/dotfiles/src", 
            "_WRD": "~/-wrk/-ve27/dotfiles/src/dotfiles", 
            "CONDA27_ROOT": "~/-wrk/-conda27", 
            "CONDA27_HOME": "~/-wrk/-ce27", 
            "CONDA34_ROOT": "~/-wrk/-conda34", 
            "CONDA34_HOME": "~/-wrk/-ce34", 
            "CONDA_ROOT__py27": "~/-wrk/-conda27", 
            "CONDA_HOME__py27": "~/-wrk/-ce27", 
            "CONDA_ROOT__py34": "~/-wrk/-conda34", 
            "CONDA_HOME__py34": "~/-wrk/-ce27", 
            "CONDA_ROOT_DEFAULT": "CONDA_ROOT__py27", 
            "CONDA_HOME_DEFAULT": "CONDA_HOME__py27", 
            "CONDA_ROOT": "~/-wrk/-conda27", 
            "CONDA_HOME": "~/-wrk/-ce27", 
            "_BIN": "~/-wrk/-ve27/dotfiles/bin", 
            "_ETCOPT": "~/-wrk/-ve27/dotfiles/etc/opt", 
            "_HOME": "~/-wrk/-ve27/dotfiles/home", 
            "_LIB": "~/-wrk/-ve27/dotfiles/lib", 
            "_PYLIB": "~/-wrk/-ve27/dotfiles/lib/python2.7", 
            "_PYSITE": "~/-wrk/-ve27/dotfiles/lib/python2.7/site-packages", 
            "_MNT": "~/-wrk/-ve27/dotfiles/mnt", 
            "_MEDIA": "~/-wrk/-ve27/dotfiles/media", 
            "_OPT": "~/-wrk/-ve27/dotfiles/opt", 
            "_ROOT": "~/-wrk/-ve27/dotfiles/root", 
            "_SBIN": "~/-wrk/-ve27/dotfiles/sbin", 
            "_SRV": "~/-wrk/-ve27/dotfiles/srv", 
            "_TMP": "~/-wrk/-ve27/dotfiles/tmp", 
            "_USR": "~/-wrk/-ve27/dotfiles/usr", 
            "_USRBIN": "~/-wrk/-ve27/dotfiles/usr/bin", 
            "_USRINCLUDE": "~/-wrk/-ve27/dotfiles/usr/include", 
            "_USRLIB": "~/-wrk/-ve27/dotfiles/usr/lib", 
            "_USRLOCAL": "~/-wrk/-ve27/dotfiles/usr/local", 
            "_USRSBIN": "~/-wrk/-ve27/dotfiles/usr/sbin", 
            "_USRSHARE": "~/-wrk/-ve27/dotfiles/usr/share", 
            "_USRSRC": "~/-wrk/-ve27/dotfiles/usr/src", 
            "_VAR": "~/-wrk/-ve27/dotfiles/var", 
            "_VARCACHE": "~/-wrk/-ve27/dotfiles/var/cache", 
            "_VARLIB": "~/-wrk/-ve27/dotfiles/var/lib", 
            "_VARLOCK": "~/-wrk/-ve27/dotfiles/var/lock", 
            "_LOG": "~/-wrk/-ve27/dotfiles/var/log", 
            "_VARMAIL": "~/-wrk/-ve27/dotfiles/var/mail", 
            "_VAROPT": "~/-wrk/-ve27/dotfiles/var/opt", 
            "_VARRUN": "~/-wrk/-ve27/dotfiles/var/run", 
            "_VARSPOOL": "~/-wrk/-ve27/dotfiles/var/spool", 
            "_VARTMP": "~/-wrk/-ve27/dotfiles/var/tmp", 
            "_WWW": "~/-wrk/-ve27/dotfiles/var/www", 
            "PROJECT_FILES": "", 
            "VIMBIN": "/usr/bin/vim", 
            "GVIMBIN": null, 
            "MVIMBIN": null, 
            "GUIVIMBIN": null, 
            "VIMCONF": "--servername dotfiles", 
            "_EDIT_": "/usr/bin/vim -f", 
            "EDITOR_": "/usr/bin/vim -f", 
            "_NOTEBOOKS": "~/-wrk/-ve27/dotfiles/src/notebooks", 
            "_IPYSESKEY": "~/-wrk/-ve27/dotfiles/src/.ipyseskey", 
            "_IPQTLOG": "~/-wrk/-ve27/dotfiles/.ipqt.log", 
            "_WRD_SETUPY": "~/-wrk/-ve27/dotfiles/src/dotfiles/setup.py", 
            "_TEST_": "(cd \"${_WRD}\" && python \"${_WRD_SETUPY}\" test)", 
            "_CFG": "~/-wrk/-ve27/dotfiles/etc/development.ini", 
            "_EDITCFG_": "/usr/bin/vim -f ~/-wrk/-ve27/dotfiles/etc/development.ini", 
            "_SHELL_": "(cd \"${_WRD}\" && \"${_BIN}\"/pshell \"${_CFG}\")", 
            "_SERVE_": "(cd \"${_WRD}\" && \"${_BIN}\"/pserve --app-name=main --reload --monitor-restart \"${_CFG}\")", 
            "_SVCFG": "~/-wrk/-ve27/dotfiles/etc/supervisord.conf", 
            "_SVCFG_": " -c \"~/-wrk/-ve27/dotfiles/etc/supervisord.conf\"", 
            "__USRLOG": "~/-usrlog.log", 
            "_USRLOG": "~/-wrk/-ve27/dotfiles/-usrlog.log", 
            "_TERM_ID": ""
        }, 
        "aliases": {
            "cdhome": "HOME", 
            "cdwrk": "__WRK", 
            "cdddotfiles": "__DOTFILES", 
            "cdprojecthome": "PROJECT_HOME", 
            "cdworkonhome": "WORKON_HOME", 
            "cdcondahome": "CONDA_HOME", 
            "cdvirtualenv": "VIRTUAL_ENV", 
            "cdsrc": "_SRC", 
            "cdwrd": "_WRD", 
            "cdbin": "_BIN", 
            "cdetc": "_ETC", 
            "cdlib": "_LIB", 
            "cdlog": "_LOG", 
            "cdpylib": "_PYLIB", 
            "cdpysite": "_PYSITE", 
            "cdvar": "_VAR", 
            "cdwww": "_WWW", 
            "cdhelp": "set | grep \"^cd.*()\" | cut -f1 -d\" \" #%l", 
            "edit-": "${_EDIT_} %l", 
            "gvim-": "/usr/bin/vim -f", 
            "ipskey": "(python -c \"import os; print os.urandom(128).encode(\\\"base64\\\")\" > \"${_IPYSESKEY}\" ) && chmod 0600 \"${_IPYSESKEY}\"; # %l", 
            "ipnb": "ipython notebook --secure --Session.keyfile=\"${_IPYSESKEY}\" --notebook-dir=\"${_NOTEBOOKS}\" --deep-reload %l", 
            "ipqt": "ipython qtconsole --secure --Session.keyfile=\"${_IPYSESKEY}\" --logappend=\"${_IPQTLOG}\" --deep-reload --pprint --colors=linux --ConsoleWidget.font_family=\"Monaco\" --ConsoleWidget.font_size=11 %l", 
            "grinv": "grin --follow %l \"${VIRTUAL_ENV}\"", 
            "grindv": "grind --follow %l --dirs \"${VIRTUAL_ENV}\"", 
            "grins": "grin --follow %l \"${_SRC}\"", 
            "grinds": "grind --follow %l --dirs \"${_SRC}\"", 
            "test-": "(cd \"${_WRD}\" && python \"${_WRD_SETUPY}\" test)", 
            "testr-": "reset && (cd \"${_WRD}\" && python \"${_WRD_SETUPY}\" test)", 
            "nose-": "(cd \"${_WRD}\" && nosetests)", 
            "grinw": "grin --follow %l \"${_WRD}\"", 
            "grin-": "grin --follow %l \"${_WRD}\"", 
            "grindw": "grind --follow %l --dirs \"${_WRD}\"", 
            "grind-": "grind --follow %l --dirs \"${_WRD}\"", 
            "hgv-": "hg view -R \"${_WRD}\"", 
            "hgl-": "hg -R \"${_WRD}\" log", 
            "editcfg": "\"${_EDITCFG_}\" %l", 
            "serve-": "(cd \"${_WRD}\" && \"${_BIN}\"/pserve --app-name=main --reload --monitor-restart \"${_CFG}\")", 
            "shell-": "(cd \"${_WRD}\" && \"${_BIN}\"/pshell \"${_CFG}\")", 
            "e": "${_EDIT_} %l", 
            "editp": "$GUIVIMBIN $VIMCONF $PROJECT_FILES %l", 
            "makewrd": "(cd \"${_WRD}\" && make %l)", 
            "make-": "(cd \"${_WRD}\" && make %l)", 
            "mw": "(cd \"${_WRD}\" && make %l)", 
            "ssv": "supervisord -c \"${_SVCFG}\"", 
            "sv": "supervisorctl -c \"${_SVCFG}\"", 
            "svt": "sv tail -f", 
            "svd": "supervisorctl -c \"${_SVCFG}\" restart dev && supervisorctl -c \"${_SVCFG}\" tail -f dev"
        }
    }, 
    "aliases": {
        "cdhome": "HOME", 
        "cdwrk": "__WRK", 
        "cdddotfiles": "__DOTFILES", 
        "cdprojecthome": "PROJECT_HOME", 
        "cdworkonhome": "WORKON_HOME", 
        "cdcondahome": "CONDA_HOME", 
        "cdvirtualenv": "VIRTUAL_ENV", 
        "cdsrc": "_SRC", 
        "cdwrd": "_WRD", 
        "cdbin": "_BIN", 
        "cdetc": "_ETC", 
        "cdlib": "_LIB", 
        "cdlog": "_LOG", 
        "cdpylib": "_PYLIB", 
        "cdpysite": "_PYSITE", 
        "cdvar": "_VAR", 
        "cdwww": "_WWW", 
        "cdhelp": "set | grep \"^cd.*()\" | cut -f1 -d\" \" #%l", 
        "edit-": "${_EDIT_} %l", 
        "gvim-": "/usr/bin/vim -f", 
        "ipskey": "(python -c \"import os; print os.urandom(128).encode(\\\"base64\\\")\" > \"${_IPYSESKEY}\" ) && chmod 0600 \"${_IPYSESKEY}\"; # %l", 
        "ipnb": "ipython notebook --secure --Session.keyfile=\"${_IPYSESKEY}\" --notebook-dir=\"${_NOTEBOOKS}\" --deep-reload %l", 
        "ipqt": "ipython qtconsole --secure --Session.keyfile=\"${_IPYSESKEY}\" --logappend=\"${_IPQTLOG}\" --deep-reload --pprint --colors=linux --ConsoleWidget.font_family=\"Monaco\" --ConsoleWidget.font_size=11 %l", 
        "grinv": "grin --follow %l \"${VIRTUAL_ENV}\"", 
        "grindv": "grind --follow %l --dirs \"${VIRTUAL_ENV}\"", 
        "grins": "grin --follow %l \"${_SRC}\"", 
        "grinds": "grind --follow %l --dirs \"${_SRC}\"", 
        "test-": "(cd \"${_WRD}\" && python \"${_WRD_SETUPY}\" test)", 
        "testr-": "reset && (cd \"${_WRD}\" && python \"${_WRD_SETUPY}\" test)", 
        "nose-": "(cd \"${_WRD}\" && nosetests)", 
        "grinw": "grin --follow %l \"${_WRD}\"", 
        "grin-": "grin --follow %l \"${_WRD}\"", 
        "grindw": "grind --follow %l --dirs \"${_WRD}\"", 
        "grind-": "grind --follow %l --dirs \"${_WRD}\"", 
        "hgv-": "hg view -R \"${_WRD}\"", 
        "hgl-": "hg -R \"${_WRD}\" log", 
        "editcfg": "\"${_EDITCFG_}\" %l", 
        "serve-": "(cd \"${_WRD}\" && \"${_BIN}\"/pserve --app-name=main --reload --monitor-restart \"${_CFG}\")", 
        "shell-": "(cd \"${_WRD}\" && \"${_BIN}\"/pshell \"${_CFG}\")", 
        "e": "${_EDIT_} %l", 
        "editp": "$GUIVIMBIN $VIMCONF $PROJECT_FILES %l", 
        "makewrd": "(cd \"${_WRD}\" && make %l)", 
        "make-": "(cd \"${_WRD}\" && make %l)", 
        "mw": "(cd \"${_WRD}\" && make %l)", 
        "ssv": "supervisord -c \"${_SVCFG}\"", 
        "sv": "supervisorctl -c \"${_SVCFG}\"", 
        "svt": "sv tail -f", 
        "svd": "supervisorctl -c \"${_SVCFG}\" restart dev && supervisorctl -c \"${_SVCFG}\" tail -f dev"
    }
}

Other scripts with venv-style paths

To define a script environment just like venv:

#!/bin/sh

__WRK="${HOME}/-wrk"                          # cdwrk
__DOTFILES="${HOME}/-dotfiles"                # cdd cddotfiles
PROJECT_HOME="${__WRK}"                       # cdph cdprojecthome
WORKON_HOME="${__WRK}/-ve27"                  # cdwh cdworkonhome

VIRTUAL_ENV_NAME="dotfiles"                   # 'dotfiles'
_APP=$VIRTUAL_ENV_NAME                        # 'dotfiles[/p/a/t/h]'
VIRTUAL_ENV="$WORKON_HOME/$VIRTUAL_ENV_NAME"  # cdv cdvirtualenv
_SRC="${VIRTUAL_ENV}/src"                     # cds cdsrc
_BIN="${VIRTUAL_ENV}/bin"                     # cde cdbin
_ETC="${VIRTUAL_ENV}/etc"                     # cde cdetc
_LOG="${VIRTUAL_ENV}/var/log"                 # cdl cdlog
# ... see: venv.py --print-vars / ...
_WRD="${_SRC}/{_APP}"                         # cdw cdwrd

(set -x; test "$_WRD" == "${HOME}/-wrk/-ve27/dotfiles/src/dotfiles"; \
    || echo "Exception: _WRD = '${_WRD}';" )

SeeAlso: unittest.TestCase tests in dotfiles.venv.ipython_config (ipython_config.py).