# 使用 direnv 自动激活 Python 虚拟环境 `direnv` 可以在进入某个项目目录时,自动加载该目录下的环境配置;离开目录时,自动恢复原来的环境。 常见用途: - 自动激活 Python `.venv` - 自动设置项目专属环境变量 - 为不同项目使用不同的 `PATH`、配置或密钥变量 --- ## 1. 安装 direnv 如果还没有安装,可以使用 Homebrew: ```bash brew install direnv ``` --- ## 2. 配置 shell hook 如果你使用的是 `zsh`,需要在 `~/.zshrc` 中加入: ```bash eval "$(direnv hook zsh)" ``` 加入后,让配置立即生效: ```bash source ~/.zshrc ``` > 这一步通常只需要做一次。 --- ## 3. 在项目目录中创建虚拟环境 进入你的项目目录,例如: ```bash cd /path/to/your/project ``` 使用 `uv` 创建虚拟环境: ```bash uv venv ``` 这会生成: ```bash .venv/ ``` --- ## 4. 创建 .envrc 文件 在项目目录中创建 `.envrc`: ```bash echo 'source .venv/bin/activate' > .envrc ``` `.envrc` 的内容是: ```bash source .venv/bin/activate ``` 意思是:进入这个目录时,自动执行虚拟环境激活命令。 --- ## 5. 授权 direnv 第一次创建或修改 `.envrc` 后,需要执行: ```bash direnv allow ``` 这是 `direnv` 的安全机制,防止自动执行不可信脚本。 --- ## 6. 测试是否生效 离开目录再重新进入: ```bash cd .. cd /path/to/your/project ``` 如果看到类似提示,说明成功: ```bash direnv: loading .envrc ``` 也可以检查当前虚拟环境: ```bash echo $VIRTUAL_ENV ``` 如果输出类似: ```bash /path/to/your/project/.venv ``` 说明 `.venv` 已经自动激活。 --- ## 以后在其他项目中怎么做 假设新项目路径是: ```bash /Users/shenliang/Projects/MyProject ``` 完整流程是: ```bash cd /Users/shenliang/Projects/MyProject uv venv echo 'source .venv/bin/activate' > .envrc direnv allow ``` 之后每次进入这个目录: ```bash cd /Users/shenliang/Projects/MyProject ``` 都会自动激活: ```bash /Users/shenliang/Projects/MyProject/.venv ``` 离开目录后,环境会自动恢复。 --- ## 常用命令 查看当前目录的 direnv 状态: ```bash direnv status ``` 重新授权当前目录: ```bash direnv allow ``` 禁止当前目录的 `.envrc`: ```bash direnv deny ``` 手动重新加载 `.envrc`: ```bash direnv reload ``` --- ## 注意事项 1. 每个项目目录都需要自己的 `.envrc` 文件。 2. 每次创建或修改 `.envrc` 后,都需要重新执行 `direnv allow`。 3. 不要随便对不信任的项目执行 `direnv allow`。 4. 如果新终端没有自动生效,检查 `~/.zshrc` 是否包含: ```bash eval "$(direnv hook zsh)" ``` 5. 如果使用的是 bash,需要放到 `~/.bashrc`: ```bash eval "$(direnv hook bash)" ```