无法通过 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)
怎么了?
我正在使用:
OS
: OS X 10.13.5
fish
: v2.7.1
pyenv
: v1.2.5
pyenv-virtualenv
: v1.1.3
我认为原因是您在 Fish shell 环境中初始化 PyEnv,然后在 调用 PyEnv Bash shell 环境(通过您的 Bash 脚本)。要解决此问题,您可以尝试以下任一可能的解决方案:
- 在您的 Bash 环境(除了您的 Fish 环境)中初始化 PyEnv
- 用 Fish 代替 Bash
编写脚本
由于 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 脚本的顶部。
我正在尝试通过非常简单的 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)
怎么了?
我正在使用:
OS
: OS X 10.13.5fish
: v2.7.1pyenv
: v1.2.5pyenv-virtualenv
: v1.1.3
我认为原因是您在 Fish shell 环境中初始化 PyEnv,然后在 调用 PyEnv Bash shell 环境(通过您的 Bash 脚本)。要解决此问题,您可以尝试以下任一可能的解决方案:
- 在您的 Bash 环境(除了您的 Fish 环境)中初始化 PyEnv
- 用 Fish 代替 Bash 编写脚本
由于 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 脚本的顶部。