Pyenv无法切换Python版本

时间:2019-10-17 08:50:23

标签: pyenv

我已经安装了pyenv,但是它没有执行其最基本的功能,即切换Python版本。以下终端命令对此进行了说明。

the file `main.py` is equivalent to:
import sys
print (sys.version)

Admins-MacBook-Pro-4:kylefoley kylefoley$ pyenv versions
  system
* 2.7.14 (set by PYENV_VERSION environment variable)
  3.5.3
  3.6.1
  3.7.3
  pypy3.6-7.1.1
Admins-MacBook-Pro-4:kylefoley kylefoley$ pyenv global 3.5.3
Admins-MacBook-Pro-4:kylefoley kylefoley$ pyenv exec python main.py
2.7.14 (default, Oct 17 2019, 00:01:43) 

您可以看到我运行main.py时的版本是2.7。很多人都有这个问题。一种常见的解决方案是投放

eval "$(pyenv init -)"

在我完成的bash_profile上,这没有帮助。在这里 Cannot switch Python with pyenv 建议:

  

将PATH和shell环境变量放入.bash_profile(或发行版使用的任何文件)中。

但是他在说什么路径和什么shell环境变量?

我的.bashrc文件看起来也像这样:

export PATH="/Users/kylefoley/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

任何帮助将不胜感激。另一件事,当我运行以下命令时,得到以下输出:

Admins-MacBook-Pro-4:kylefoley kylefoley$ python
Python 3.6.1rc1 (default, Mar  4 2017, 22:58:58) 

3 个答案:

答案 0 :(得分:1)

问题是.bashrc不在{strong>非登录模式下source

Bash的初始化文件:

  • 登录模式
    • /etc/profile
    • ~/.bash_profile~/.bash_login~/.profile(仅存在的第一个)
  • 互动式非登录
    • /etc/bash.bashrc(某些Linux;不适用于Mac OS X)
    • ~/.bashrc
  • 非交互式
    • $BASH_ENV中的源文件

在macOS上,由终端应用程序打开的默认Bash外壳是交互式登录外壳,但是在Linux上,由终端应用程序打开的默认Bash外壳是交互式非登录外壳。

解决方案

在其他情况下,奇怪的交互式非登录加载要求也会使人们感到困惑。 最佳解决方案是将~/.bashrc的加载要求更改为仅限交互式,这正是大多数Linux发行版正在做的事情。

# write content below into ~/.bash_profile

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

这应该是您想要的解决方案。并且我建议每个Bash用户在配置文件中对此进行设置。

参考

答案 1 :(得分:0)

一切都正确地完成了,只是我以为终端命令. ~/.bash_profile更新了bash配置文件,而不必关闭终端或打开新终端来使更改生效。事实证明,. ~/.bash_profile仅更新了一些bash_profile。重新启动终端后,一切都按计划进行。

答案 2 :(得分:0)

1.) 配置:

pyenv global [python version]

2.)重启终端(关闭所有终端窗口)