Useimpiin web-projekteihini liittyy Python-virtuaaliympäristö, joka on toteutettu virtualenvwrapperilla. Huomasin, että siirtyessäni työskentelemään projektin parissa kirjoitan aina kaksi komentoa tähän tyyliin:

$ cd myproject
$ workon myproject

Rupesin miettimään, voisiko tämän automatisoida niin, että kun siirryn myproject-hakemistoon, niin virtuaaliympäristö aktivoitaisiin automaattisesti. Ja tähän löytyykin helppo ratkaisu, kunhan käyttää bash-shelliä (oletus Mac OS X:ssä sekä useimmissa Linuxeissa) ja asettaa sille PROMPT_COMMAND-muuttujan. Tämän muuttujan sisältämä komento ajetaan joka kerta, kun bash näyttää komentokehotteen.

Tässä esimerkki:

export PROMPT_COMMAND='[ -z "$VIRTUAL_ENV" -a -n "$WORKON_HOME" -a -d $WORKON_HOME/$(basename $PWD) ] && workon $(basename $PWD)'

Komento tarkistaa ensin, onko $VIRTUAL_ENV jo asetettu, eli ollaanko jo virtuaaliympäristössä. Jos ei olla, niin tarkistetaan, onko virtualenvwrapper asennettu ($WORKON_HOME) ja löytyykö siitä samanniminen ympäristö kuin tämänhetkinen hakemisto. Jos löytyy, niin ajetaan workon-skripti, joka aktivoi kyseisen virtuaaliympäristön. Tällöin $VIRTUAL_ENV asettuu automaattisesti, eikä komentoa enää ajella uudelleen.

PROMPT_COMMANDin kanssa ei kannata kikkailla liikaa, ettei shellin käyttö hidastu turhaan jokaisella enterinpainalluksella. Tätäkin esimerkkiä voisi varmaan optimoida lisää, mutta tuntuisi se kuitenkin toimivan.

Published 14.3.2012