- Forgetting to add a package to requirements
- Forgetting to run the linter
- (rarely, but it does happen) Forgetting to run unit tests
I make use of piplint to check requirements. Note that the pypi version doesn't work on Python 3, but I have an updated fork installable with:
pip install -e git://github.com/jessamynsmith/piplint.
As it turns out, virtualenvwrapper is highly customizable, and all I had to do was edit mkvirtualenv in WORKON_HOME to have it modify my activate scripts. While I was in there, I decided to make a skeleton pre-commit hook for the project:
# This hook is run after a new virtualenv is created and before it is activated.
# Automatically set django settings for the virtualenv
echo "export DJANGO_SETTINGS_MODULE=$1.settings.development" >> "$1/bin/activate"
# Create a pre-commit hook script that can be copied over as desired
piplint -x requirements/*
python manage.py test $1
" >> "$1/bin/pre-commit"
Now every new virtualenv comes with Django settings prepopulated. If it's not a Django project, that unused environment variable isn't going to hurt anything.
You can add more environment variables later by editing ~/.virtualenvs/<VIRTUAL_ENV_NAME>/bin/
I don't automatically move that pre-commit hook because there is no guarantee I have anywhere to put it. Sometimes I make the virtualenv before I initialized a git repo. However, the hard work has been done so once I make a project, I can simply copy over the hook. Note that the git hook must be made executable or it will be ignored.