无法使用pyenv激活virtualenv

Rom*_*lus 17 python bash virtualenv pyenv

我跑:

pyenv activate new_app
Run Code Online (Sandbox Code Playgroud)

我得到:

Failed to activate virtualenv.

Perhaps pyenv-virtualenv has not been loaded into your shell properly.
Please restart current shell and try again.
Run Code Online (Sandbox Code Playgroud)

我正在尝试遵循本教程:https://tutorials.technology/tutorials/59-Start-a-flask-project-from-zero-building-api-rest.html

其他信息:

bash-3.2$ python --version
Python 3.6.0

bash-3.2$ pyenv version
3.6.0 (set by /Users/me/Projects/flask_api/.python-version)

bash-3.2$ pwd
/Users/me/Projects/flask_api

bash-3.2$ pyenv versions
  system
  3.5.1
  3.5.1/envs/my_env_3_5_1
* 3.6.0 (set by /Users/me/Projects/flask_api/.python-version)
  3.6.0/envs/new_app
  flask_app
  my_env_3_5_1
  new_app

bash-3.2$ virtualenv --version
15.1.0

bash-3.2$ pyenv virtualenvs
3.5.1/envs/my_env_3_5_1 (created from /Users/me/.pyenv/versions/3.5.1)
  3.6.0/envs/new_app (created from /Users/me/.pyenv/versions/3.6.0)
  flask_app (created from /System/Library/Frameworks/Python.framework/Versions/2.7)
  my_env_3_5_1 (created from /Users/me/.pyenv/versions/3.5.1)
  new_app (created from /Users/me/.pyenv/versions/3.6.0)
Run Code Online (Sandbox Code Playgroud)

我最近把.bash_profile它包含在内:

bash-3.2$ cat ~/.bash_profile 
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
exec "$SHELL"
if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能正确启动virtualenv?

Has*_*tax 77

~/.zshrc文件内:

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

eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
Run Code Online (Sandbox Code Playgroud)

遗憾的是,仅这些eval行(如 pyenv 和 pyenv-virtualenv 说明中所述)对我不起作用。

  • 双重初始化调用对我来说也是必要的,+1。 (2认同)
  • 只有这个答案对我在 macOS Monterey 上有效,谢谢@Kalanos! (2认同)
  • 有人有某种解释的链接吗?这组命令对我来说很有效,但我仍然不知道为什么。 (2认同)

phd*_*phd 35

eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
Run Code Online (Sandbox Code Playgroud)

应该在.bashrc,而不是.bash_profile.后者仅由登录 shell 执行,前者由所有交互式shell执行.

  • 这一切在 pyenv 2.0 中都发生了变化。现在已经变得相当令人沮丧了。 (3认同)
  • 当我尝试使用 pyenv 2.0 时,它说“pyenv:没有这样的命令‘virtualenv-init’” (2认同)

Sli*_*eam 22

  1. 将下面的行添加到您的~/.bash_profile~/.zprofile
eval "$(pyenv init -)"  
eval "$(pyenv virtualenv-init -)"
Run Code Online (Sandbox Code Playgroud)
  1. 重新启动 shell 或运行命令:
source ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

笔记:

如果您使用的是zsh shellmacOS Catalina和/或Big Sur 的默认设置),则必须使用~/.zprofilefile 而不是~/.bash_profile

  • 谢谢你!这救了我..刚刚升级到大苏尔并遇到了这个 (3认同)

小智 9

对我来说,以下内容解决了我的问题。我正在使用 MacBook Pro 谢谢@Kalanos

eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
Run Code Online (Sandbox Code Playgroud)