我在使用 pyenv-virtualenv (不是虚拟环境!)时为 VSCode 配置任务时遇到问题,有点类似于 this,但尚未解决,而且它也仅引用 .zshrc 而不是 .zprofile。
我配置了 pyenv 环境,并在项目中选择了 python 解释器。在 VSCode 内的终端中,我可以执行代码,并且终端会自动加载正确的 pyenv。
但是,当运行 VSCode 任务时,任务无法激活项目的 pyenv virtualenv。
例如在我的项目的终端我得到:
(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",´
}
}
任务运行的输出:
激活 virtualenv 失败。
也许 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”,但没有得到 pyenv 激活所在的“Hello .zshrc”的输出。当我手动创建一个新的 VSCode 终端时,它会输出两者。
现在,如果我将 pyenv 激活复制或移动到 .zprofile 中,pyenv 虚拟环境将激活并且任务将运行。
但是为什么 VSCode 不首先读取我的 .zprofile 和 .zshrc 文件?
要使用 zsh 激活
pyenv-virtualenv
,请将 eval "$(pyenv init -)"
放在 .zprofile
内,而不是 .zshrc
。前者在 VSCode 创建终端时执行,后者则不会。