自定义 Shell 函数实现 进目录自动激活虚拟环境

请在终端中执行以下命令,将这段逻辑追加到你的配置文件末尾:

cat >> ~/.bashrc << 'EOF'

# --- 自动激活 Python 虚拟环境逻辑开始 ---
# 逻辑:进入含 .venv 的目录自动激活,离开项目根目录自动退出
auto_venv_activate() {
    # 定义虚拟环境目录名,可根据需要添加 "venv"
    local venv_names=(".venv" "venv")
    local found_venv=""

    # 1. 检查当前目录下是否存在虚拟环境
    for name in "${venv_names[@]}"; do
        if [ -d "$PWD/$name" ] && [ -f "$PWD/$name/bin/activate" ]; then
            found_venv="$PWD/$name/bin/activate"
            break
        fi
    done

    # 2. 如果找到了虚拟环境且当前未激活,则激活它
    if [ -n "$found_venv" ]; then
        if [ "$VIRTUAL_ENV" != "${found_venv%/bin/activate}" ]; then
            source "$found_venv"
        fi
    # 3. 如果当前已激活,但所在目录已不再是该虚拟环境的根目录(或其子目录),则退出
    elif [ -n "$VIRTUAL_ENV" ]; then
        # 检查当前路径是否依然在已激活环境的父级目录内
        if [[ "$PWD" != "${VIRTUAL_ENV%/*}"* ]]; then
            deactivate
        fi
    fi
}

# 使用 PROMPT_COMMAND 在每次显示提示符前运行,比改写 cd 更稳健(支持 pushd/popd)
export PROMPT_COMMAND="auto_venv_activate;$PROMPT_COMMAND"
# --- 自动激活逻辑结束 ---
EOF

# 立即刷新配置使其生效
source ~/.bashrc

 

滚动至顶部