簡體   English   中英

無法使用 pyenv 激活 virtualenv

[英]Failed to activate virtualenv with pyenv

我跑:

pyenv activate new_app

我得到:

Failed to activate virtualenv.

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

我正在嘗試遵循本教程: 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)

我最近制作了我的.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

我應該怎么做才能正確啟動 virtualenv?

eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

應該在.bashrc ,而不是.bash_profile 后者僅由登錄shell 執行,前者由所有交互式 shell 執行。

  1. ~/.zprofile添加到您的~/.bash_profile~/.zprofile
eval "$(pyenv init -)"  
eval "$(pyenv virtualenv-init -)"
  1. 重新啟動 shell 或運行命令:
source ~/.bash_profile

注意:

如果您使用zsh shellmacOS Catalina和/或Big Sur 的默認設置),則必須使用~/.zprofile文件而不是~/.bash_profile

對我來說,以下解決了我的問題。 我正在使用 MacBook Pro 感謝@Kalanos

eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

~/.zshrc

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

遺憾的是,單獨的 init 行(在 pyenv 和 pyenv-virtualenv 說明中提到)對我不起作用

對於那些仍在努力獲得python --version打印出預期結果的人來說,在像我一樣花了幾個小時之后,這里有一個可行的解決方案(在 MacOS 環境中,如果這很重要的話)。

將這些行添加到您的~/.zshrc~/.bash_profile或其他任何內容:

eval "$(pyenv init --path)"  # <-- super important!
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

有關上下文,請參閱https://github.com/pyenv/pyenv/issues/849#issuecomment-875875617

為了性能,我建議不僅對這種情況使用條件初始化,而且對你的 shell 配置中的所有 eval 語句都使用條件初始化 [~/.zshrc 等]

if command -v pyenv 1>/dev/null 2>&1; then
    eval "$(pyenv init --path)"
fi

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM