VSCode任务与pyenv和zsh
我在用 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
则不会被执行。