VSCode任务与pyenv和zsh

0 投票
1 回答
23 浏览
提问于 2025-04-12 18:09

我在用 pyenv-virtualenv 配置 VSCode 的任务时遇到了一些问题,这个问题有点像这个,但没有解决,而且它只提到了 .zshrc 文件,而没有提到 .zprofile。

我已经配置了一个 pyenv 环境,并且在项目中选择了那个 Python 解释器。在 VSCode 的终端里,我可以执行代码,终端会自动加载正确的 pyenv。

但是,当我运行 VSCode 的任务时,任务无法激活项目的 pyenv 虚拟环境。

例如,在我项目的终端里,我得到了:

(proj) % pyenv local
projenv
(proj) % python --version
Python 3.10.4

我尝试了 .vscode/tasks.json:


{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Run some python",
            "type": "shell",
            "command": "pyenv activate projenv && python --version",´
        }
}

输出:

Python 2.7.18

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Run some python",
            "type": "shell",
            "command": "pyenv activate projenv && python --version",´
        }
}

任务运行时的输出:

无法激活虚拟环境。

可能是 pyenv-virtualenv 没有正确加载到你的 shell 中。 请重启当前的 shell 再试一次。

在我的 ~/.zprofile 文件中,我有:

echo "Hello .zprofile"

在我的 ~/.zshrc 文件中,我有:

echo "Hello .zshrc"
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

当我运行任务时,我能看到 "Hello .zprofile" 的输出,但没有看到 "Hello .zshrc" 的输出,而 pyenv 的激活就在这里。当我手动创建一个新的 VSCode 终端时,它会输出两个内容。

现在,如果我把 pyenv 的激活代码复制到 .zprofile 中,pyenv 虚拟环境就会激活,任务也能运行。

但是,为什么 VSCode 一开始不读取我的 .zprofile 和 .zshrc 文件呢?

1 个回答

0

要在 zsh 中启用 pyenv-virtualenv,你需要把 eval "$(pyenv init -)" 这行代码放到 .zprofile 文件里,而不是 .zshrc。因为 .zprofile 是在 VSCode 创建终端时执行的,而 .zshrc 则不会被执行。

撰写回答