direnv-自动激活虚拟环境.md 2.8 KB

使用 direnv 自动激活 Python 虚拟环境

direnv 可以在进入某个项目目录时,自动加载该目录下的环境配置;离开目录时,自动恢复原来的环境。

常见用途:

  • 自动激活 Python .venv
  • 自动设置项目专属环境变量
  • 为不同项目使用不同的 PATH、配置或密钥变量

1. 安装 direnv

如果还没有安装,可以使用 Homebrew:

brew install direnv

2. 配置 shell hook

如果你使用的是 zsh,需要在 ~/.zshrc 中加入:

eval "$(direnv hook zsh)"

加入后,让配置立即生效:

source ~/.zshrc

这一步通常只需要做一次。


3. 在项目目录中创建虚拟环境

进入你的项目目录,例如:

cd /path/to/your/project

使用 uv 创建虚拟环境:

uv venv

这会生成:

.venv/

4. 创建 .envrc 文件

在项目目录中创建 .envrc

echo 'source .venv/bin/activate' > .envrc

.envrc 的内容是:

source .venv/bin/activate

意思是:进入这个目录时,自动执行虚拟环境激活命令。


5. 授权 direnv

第一次创建或修改 .envrc 后,需要执行:

direnv allow

这是 direnv 的安全机制,防止自动执行不可信脚本。


6. 测试是否生效

离开目录再重新进入:

cd ..
cd /path/to/your/project

如果看到类似提示,说明成功:

direnv: loading .envrc

也可以检查当前虚拟环境:

echo $VIRTUAL_ENV

如果输出类似:

/path/to/your/project/.venv

说明 .venv 已经自动激活。


以后在其他项目中怎么做

假设新项目路径是:

/Users/shenliang/Projects/MyProject

完整流程是:

cd /Users/shenliang/Projects/MyProject
uv venv
echo 'source .venv/bin/activate' > .envrc
direnv allow

之后每次进入这个目录:

cd /Users/shenliang/Projects/MyProject

都会自动激活:

/Users/shenliang/Projects/MyProject/.venv

离开目录后,环境会自动恢复。


常用命令

查看当前目录的 direnv 状态:

direnv status

重新授权当前目录:

direnv allow

禁止当前目录的 .envrc

direnv deny

手动重新加载 .envrc

direnv reload

注意事项

  1. 每个项目目录都需要自己的 .envrc 文件。
  2. 每次创建或修改 .envrc 后,都需要重新执行 direnv allow
  3. 不要随便对不信任的项目执行 direnv allow
  4. 如果新终端没有自动生效,检查 ~/.zshrc 是否包含:

    eval "$(direnv hook zsh)"
    
  5. 如果使用的是 bash,需要放到 ~/.bashrc

    eval "$(direnv hook bash)"