Python PDM包管理器如何启用虚拟环境自动检测?
PDM项目配置与虚拟环境自动激活设置
项目配置文件位置
PDM的项目级配置文件直接存放在对应项目的根目录下,文件名为.pdm.toml,和项目内的pyproject.toml、pdm.lock处于同一层级,可以直接用任意文本编辑器打开修改。
如果是全局级别的PDM配置,默认存储在~/.config/pdm/config.toml路径下,不属于项目配置范畴。
启用虚拟环境自动检测功能
PDM自动检测虚拟环境的触发条件满足任意一项即可:
- 项目配置中未存储固定的Python解释器路径
- 系统环境变量中设置了
PDM_IGNORE_SAVED_PYTHON=1
对应的配置操作有两种可选:
- 清除项目内保存的固定解释器路径,在项目根目录下执行命令:
执行后PDM会自动清空pdm config --local python.path "".pdm.toml中存储的解释器路径,后续在项目目录下执行PDM相关命令时,会自动扫描项目根目录下的.venv、venv、env目录匹配可用虚拟环境。 - 保留已保存的解释器配置,通过环境变量强制开启自动检测:
在你使用的Shell配置文件(zsh对应~/.zshrc,bash对应~/.bashrc)中添加一行:
保存后执行export PDM_IGNORE_SAVED_PYTHON=1source ~/.zshrc(或对应Shell的配置文件)让配置生效即可。
实现切换目录自动激活in-project虚拟环境
仅开启自动检测不会在cd进入目录时自动激活虚拟环境,需要额外配置Shell钩子,以常见的zsh和bash为例:
Zsh配置
在~/.zshrc文件末尾添加以下内容:
# PDM 配置 eval "$(pdm --pep582)" pdm_auto_activate_venv() { local project_venv project_venv=$(pdm venv activate in-project 2>/dev/null | grep -oE '/[^"]+/bin/activate' | head -n1) if [[ -n "$project_venv" && -f "$project_venv" && "$VIRTUAL_ENV" != "${project_venv%/bin/activate}" ]]; then # 先退出已激活的其他虚拟环境 [[ -n "$VIRTUAL_ENV" ]] && deactivate source "$project_venv" fi } add-zsh-hook chpwd pdm_auto_activate_venv pdm_auto_activate_venv
保存后执行source ~/.zshrc生效,之后cd进入PDM项目目录就会自动激活对应的in-project虚拟环境,切换到无虚拟环境的目录时会自动退出已激活的环境。
Bash配置
在~/.bashrc文件末尾添加以下内容:
# PDM 配置 eval "$(pdm --pep582)" pdm_auto_activate_venv() { local project_venv project_venv=$(pdm venv activate in-project 2>/dev/null | grep -oE '/[^"]+/bin/activate' | head -n1) if [[ -n "$project_venv" && -f "$project_venv" && "$VIRTUAL_ENV" != "${project_venv%/bin/activate}" ]]; then [[ -n "$VIRTUAL_ENV" ]] && deactivate source "$project_venv" fi } export PROMPT_COMMAND="pdm_auto_activate_venv; $PROMPT_COMMAND"
保存后执行source ~/.bashrc生效即可。
注:当前项目根目录已经存在
.venv目录,说明已经开启了in-project虚拟环境存储配置,不需要额外修改venv.in_project相关参数。
内容的提问来源于stack exchange,提问作者SystemTheory
相关产品推荐
相关产品推荐

