autoload -U add-zsh-hook add-zsh-hook chpwd __python_change_venv function __python_change_venv() { local _path=$(pwd) local _paths=("${_path}") while [[ "${_path}" != "${HOME}" ]] && [[ "${_path}" != "/" ]]; do _path="${_path:h}" _paths+=("${_path}") done for _path in ${_paths}; do local _venv_config=$(find "${_path}" -maxdepth 2 -mindepth 2 -name pyvenv.cfg 2>/dev/null | head -n1) if [[ ${_venv_config} != "" ]]; then local _venv_path="${_venv_config:h}" source "${_venv_path}/bin/activate" break fi done if [[ "${VIRTUAL_ENV}" == "" ]]; then source "${DEFAULT_PYTHON_VENV}/bin/activate" fi }