我想用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

当前回答

背景

现在:20210926 麦克:10.15.7 pyenv: 2.0.7

解决方案

对于当前控制台

eval "$(pyenv init --path)"

用于每次启动后的工作

如果你想在Mac引导后自动生效,那么把它添加到你的引导脚本中

这里是zsh,所以:

vi ~/.zshrc

add

Eval $(pyenv init——path)

完成了。

其他回答

试试这个:eval "$(pyenv init -)"

例子:

$ python -V
Python 2.7.9
mac:~ $ eval "$(pyenv init -)"
mac:~ $ python -V
Python 3.5.0

更多信息: https://github.com/pyenv/pyenv

假设你是MacOS用户……

Run

pyenv init

要得到这个建议:

# See the README for instructions on how to set up
# your shell environment for Pyenv.

所以,去https://github.com/pyenv/pyenv#readme获取这个小贴士吧:

Zsh: MacOS,如果Pyenv安装了Homebrew:

echo 'eval "$(pyenv init --path)"' >> ~/.zprofile
 
echo 'eval "$(pyenv init -)"' >> ~/.zshrc

确保你的终端 应用程序将shell作为登录shell运行。

适用于macOS Monterey 12.0.1和pyenv 2.2.0。 Pyenv通过brew安装,python通过Pyenv install安装。

仅供参考,如果你的可执行文件早于pyenv的shim位置,那么当你在shell中键入python时,你将无法更改python版本。

要正确使用pyenv, shim目录应该是PATH变量中的第一个内容。例如,

如果你的PATH看起来像

/usr/bin:/home/kenobi/.pyenv/shims:...

如果你在/usr/bin中有一个python可执行文件,你将不能正确使用pyenv。您应该在~/中安排您的PATH配置。Bashrc如下图

/home/kenobi/.pyenv/shims:/usr/bin:...

然后重新启动shell,就不会有问题了。 对我来说,我在~/.zshrc中有这些行

# PyEnv
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"  # This line was causing the problem
eval "$(pyenv init --path)"

# Docker
export PATH=/usr/bin:$PATH
export DOCKER_HOST=unix:///run/user/1000/docker.sock

正如您所看到的,我在pyenv配置行之后设置了export PATH=/usr/bin:$PATH。然后我通过像下面这样切换块来解决这个问题

# Docker
export PATH=/usr/bin:$PATH  # Not a problem anymore.
export DOCKER_HOST=unix:///run/user/1000/docker.sock

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

我用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  

在ubuntu中~/。Bashrc文件需要更新,将eval“$(pyenv init -)”更改为eval“$(pyenv init——path)”。

编辑:只是要指出,更改将在重新启动终端后生效。如果您不想重新启动终端,除了更改文件之外,还可以执行额外的步骤。在终端中执行你在文件中修改的命令:eval "$(pyenv init——path)"