无法通过 shellscript 激活 virtualenv

Failed to activate virtualenv via shellscript

我正在尝试通过非常简单的 bash 脚本激活我的 pyenv-virtualenv 环境。

set -e
pyenv activate myenv

但是我无法激活我的环境,出现以下错误:

Failed to activate virtualenv.

Perhaps pyenv-virtualenv has not been loaded into your shell properly.
Please restart current shell and try again.

我可以在命令行中激活它,所以我认为这是由于我的 shell 环境。

我使用 fish shell,但它是在 bash shell 中读取 $PATH 设置后启动的。 我给你看我的设置。

.bash_profile:

export LANG="ja_JP.UTF-8"

export XDG_CONFIG_HOME="$HOME/.config"

export PATH="/sbin"
export PATH="/usr/sbin:$PATH"
export PATH="/bin:$PATH"
export PATH="/usr/bin:$PATH"
export PATH="/usr/local/bin:$PATH"

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"

exec fish

还有我的 config.fish:

status --is-interactive; and source (pyenv init -|psub)
status --is-interactive; and source (pyenv virtualenv-init -|psub)

怎么了?

我正在使用:

我认为原因是您在 Fish shell 环境中初始化 PyEnv,然后在 调用 PyEnv Bash shell 环境(通过您的 Bash 脚本)。要解决此问题,您可以尝试以下任一可能的解决方案:

  1. 在您的 Bash 环境(除了您的 Fish 环境)中初始化 PyEnv
  2. 用 Fish 代替 Bash
  3. 编写脚本

由于 PyEnv 似乎比 Fish 对 Bash 有更好的支持,让我们关注选项 #1。 PyEnv 安装指南的第 3 步建议使用以下命令将 PyEnv 初始化添加到您的 ~/.bash_profile:

$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

在 运行 该命令之后,我怀疑您的脚本会按预期运行。如果没有,您可以尝试将相同的 PyEnv 初始化片段(您刚刚添加到 ~/.bash_profile)添加到 Bash 脚本的顶部。