Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save gridhead/cb84d7374cc2f8204082268773f84085 to your computer and use it in GitHub Desktop.
Save gridhead/cb84d7374cc2f8204082268773f84085 to your computer and use it in GitHub Desktop.
Auto-activate Python virtualenvwrapper environment if shell is started within a project directory
# ...
# Copyright © 2021 Nils Philippsen <nils@tiptoe.de>
# Licensed under the MIT license as published by the Open Source Initiative
# Auto-activate Python virtualenvwrapper environment if shell is started within a project directory
_old_nullglob=$(shopt -p nullglob)
shopt -s nullglob
unset _projdirs_venvs
declare -A _projdirs_venvs
for _venvdir in ${WORKON_HOME:-$HOME/.virtualenvs}/*/; do
_projfile="${_venvdir}/.project"
if [ ! -f "$_projfile" ]; then
continue
fi
_venvdir="${_venvdir%%/}"
_projdir="$(tr -d '\0' < "${_venvdir}/.project")"
if [ -z "$_projdir" ]; then
continue
fi
_venv="${_venvdir##*/}"
_projdirs_venvs[$_projdir]="$_venv"
done
unset _projdirs_sorted
declare -a _projdirs_sorted
while read _projdir; do
_projdirs_sorted+=("$_projdir")
done < <(for _projdir in "${!_projdirs_venvs[@]}"; do
echo "$_projdir"
done | sort -r)
for _projdir in "${_projdirs_sorted[@]}"; do
if [ "$PWD" = "$_projdir" -o "${PWD#${_projdir}/}" != "$PWD" ]; then
_venv="${_projdirs_venvs[${_projdir}]}"
workon -n "$_venv"
break
fi
done
eval $_old_nullglob
unset _old_nullglob _projdirs_venvs _venvdir _projfile _projdir _venv
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment