我想用pyenv来切换python2和python3。

我成功下载了python2和python3和pyenv下面的代码。

brew install pyenv

brew install pyenv-virtualenv

pyenv install 2.7.10

pyenv install 3.5.0

但是,我不能从python2切换到python3..

Soma-Suzuki:~ Soma$ python --version
Python 2.7.10
Soma-Suzuki:~ Soma$ pyenv global
2.7.10
Soma-Suzuki:~ Soma$ pyenv versions
  system
* 2.7.10 (set by /Users/Soma/.pyenv/version)
  3.5.0
Soma-Suzuki:~ Soma$ pyenv global 3.5.0
Soma-Suzuki:~ Soma$ pyenv global
3.5.0
Soma-Suzuki:~ Soma$ pyenv versions
  system
  2.7.10
* 3.5.0 (set by /Users/Soma/.pyenv/version)
Soma-Suzuki:~ Soma$ python --version
Python 2.7.10
Soma-Suzuki:~ Soma$ 

我不明白为什么会这样。

我的python在这个目录中。

Soma-Suzuki:~ Soma$ which python
/usr/bin/python

当前回答

手动操作。 更改~/.zprofile中的路径

vim ~/.zprofile
 PATH="/Users/you-user-name/.pyenv/versions/3.10.9/bin:${PATH}"
 export PATH

其他回答

存在不能更新~/的情况。Bashrc或~/。Bash_profile,因为机器是共享的。在这种情况下,向bash脚本中添加eval "$(pyenv init——path)"仍然可以工作,因为pyenv init将pyenv shims的路径添加到$ path中。例如,pyenv将执行如下命令:

export PATH="/path/to/.pyenv/shims:${PATH}"

希望这能解释为什么它是有效的。或者,可以将/路径/导出到/。Pyenv /shims在他们的bash脚本中,它应该允许Pyenv切换python版本。

我还面临着eval "$(pyenv init -)"确实帮助将python版本切换到3.8.8的情况。但是当我启动一个虚拟环境时,虚拟环境创建中的python版本会失败:

virtualenv "$VENV_PATH" -p 3.8.8

RuntimeError: failed to find interpreter for Builtin discover of python_spec='python3.8.8'

但是通过eval "$(pyenv init——path)",虚拟环境也得到了3.8.8。python的版本。

运行pyenv init并严格执行它告诉您的操作。 对我来说,解决方案是在.profile中添加以下内容:

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

并将这一行添加到.bashrc:

eval "$(pyenv init -)"

不要忘记重新启动您的shell。(关闭并重新打开或执行“$SHELL”)

我用brew安装了pyenv和pyenv-virtualenv,也遇到了同样的问题。

在你知道该怎么做之后就很容易解决了:

1-你需要知道你在使用什么shell解释器。直接引用自https://support.apple.com/en-us/HT208050

默认情况下,Mac使用zsh或bash作为命令行 登录shell和交互shell的解释器: zsh (Z shell)是所有新创建的用户帐户的默认shell,从macOS Catalina开始。 bash是macOS Mojave及更早版本的默认shell。

当然,每个解释器都为环境变量使用不同的文件,如PATH、JAVA_HOME等。 bash使用$HOME/。bash_profile和$HOME/。而zsh使用$HOME/。$HOME/.zshrc

2-在安装pyenv和安装你想要使用的python版本(例如pyenv install 3.y)之后,打开/。Bash_profile或/。Zprofile文件WRT你的解释器。

注1:我使用bash解释器和我的$HOME/。Bashrc文件为空。我不知道会发生什么不管/中的PATH声明。Bashrc会影响/。是否声明Bash_profile。你可能需要检查一下。

pyenv创建$HOME/。Pyenv /shims目录,并使用它来切换您安装的python版本。

因此,您只需要在底部添加以下一行(不一定是文件的最底部)。你只需要走到所有PATH声明的末尾。)

export PATH=$HOME/.pyenv/shims:$PATH

注2:“$ HOME /。pyenv/shims"必须在PATH变量的开头。因为解释器从左到右读取所有路径。因此,将来要小心向PATH变量添加新路径。

Note3: There are two commands that sets python version. One is "pyenv global #python_version_here#" and the other is "pyenv local #python_version_here#". Under a directory, hierarchically "local" command is top of "global" one. So, if you run the "local" command under $HOME directory, you cannot change the global python version with the "global" command. In that case, either 1- You can continue to use "local" command under the $HOME directory 2- Delete $HOME/.python-version file and return to "global" setting

这是我的shell输出来显示这个层次结构:

Ozgurs-MacBook-Pro:~ ozgurcengelli$ pyenv global system  
Ozgurs-MacBook-Pro:~ ozgurcengelli$ pyenv versions  
* system (set by /Users/ozgurcengelli/.pyenv/version) #look the path  
  3.6.15  
Ozgurs-MacBook-Pro:~ ozgurcengelli$ pyenv local system  
Ozgurs-MacBook-Pro:~ ozgurcengelli$ pyenv versions  
* system (set by /Users/ozgurcengelli/.python-version) #look the path  
  3.6.15  
Ozgurs-MacBook-Pro:~ ozgurcengelli$ pyenv global 3.6.15  
Ozgurs-MacBook-Pro:~ ozgurcengelli$ pyenv versions  
* system (set by /Users/ozgurcengelli/.python-version) #look the path  
  3.6.15  
Ozgurs-MacBook-Pro:~ ozgurcengelli$ rm $HOME/.python-version  
Ozgurs-MacBook-Pro:~ ozgurcengelli$ pyenv versions  
  system  
* 3.6.15 (set by /Users/ozgurcengelli/.pyenv/version) #look the path  

以上答案没有一个管用。看起来我没有遵循正确的安装过程。我通过以下方法来解决这个问题:

进入~/.zshrc 在文件末尾添加别名brew='env PATH="${PATH//$(pyenv root)\/shims:/}" brew' 执行pyenv init命令

在pyenv文档中有更多关于这方面的内容

检查你的路径。当它应该是.pyenv/shims时,我却用了.pyenv/bin。

用export path ="$HOME/ "修复路径。pyenv/shims:$PATH"(并添加到zshrc等)。