无法使用pyenv切换Python

无法使用pyenv切换Python,python,pyenv,Python,Pyenv,我想使用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切换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
提前谢谢。

试试这个:
eval“$(pyenv init-”

例如:

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

您忘记添加此
eval“$(pyenv init-”


将其添加到.bash_配置文件或.bashrc文件中(mac此答案仅适用于正在使用Fish shell并找到此线程的用户。Pyenv使用垫片,因此为了使Pyenv与您的Fish shell一起工作,您必须编辑~/.config/Fish/config.Fish文件,并在$PATH变量开头追加pyen shim目录。下面是my config.Fish的外观

### PATH ###
set default_path /usr/local/bin /usr/bin /usr/sbin /bin /sbin
set macports /opt/local/bin
set androiddev ~/Android\ Development/platform-tools/
set rbenv ~/.rbenv/shims/
set pyenv ~/.pyenv/shims/
set anaconda /Users/m4punk/anaconda/bin/
set pg_config /Applications/Postgres.app/Contents/Versions/9.5/bin/


### Virtual Enviroment Wrapper ###

set -g VIRTUALFISH_HOME ~/Documents/Coding/python/virtualenvs
set -g VIRTUALFISH_DEFAULT_PYTHON /usr/local/bin/python3
eval (python -m virtualfish)

### NVM Settings ###
set -g NVM_DIR ~/.nvm

set -gx PATH $pyenv $default_path $macports $androiddev $rbenv $pg_config

setenv EDITOR sublime
这里的相关行是

set pyenv ~/.pyenv/shims/


第一个为pyenv shim path创建一个变量,第二个将其添加到path变量的前面。只需保存并关闭,重新启动终端会话,您就可以完成所有设置。

我遇到了同样的问题,并最终对方式进行了一些更改
pyenv init
开始设置shell,但在与pyenv github页面上的唯一真正区别是,我还必须将
$(pyenv root)/bin
目录添加到我的路径中

我这样做的原因是为了避免运行
eval“$(pyenv init-”时需要很长的shell启动时间
和所有其他
.bash_profile
在我本地的shell环境中工作。我要明确的是,Pyenv本身并不会带来不好的shell体验,但在我看来,当您使用几种语言时,它们都有自己的版本管理系统和工具,喜欢使用pyenv等,shell初始化过程可能会变慢

以下是我在高视角下进行自我定位的步骤:

  • 运行
    pyenv init
    命令的干运行版本,以便查看 它会为你做些什么
  • 路径
    和shell环境变量放入
    .bash\u配置文件
    (或发行版使用的任何文件)
  • 将函数
    pyenv init
    打印到
    .bashrc
    中,并为
    .bashrc
    编写源代码 从您的
    .bash\u配置文件中
  • 这是完成它的一种方法,但最好将其用作“伪代码”。您应该将
    .bash\u profile
    交换给发行版喜欢的任何文件

    $ pyenv init - # use the output for reference, it doesn't actually do anything
    $ cat <<EOBP > ~/.bash_profile
    export PYENV_SHELL=bash
    PATH=$(pyenv root)/shims:$(pyenv root)/bin:$PATH
    [ -f  /usr/local/Cellar/pyenv/1.2.9/completions/pyenv.bash ] && . /usr/local/Cellar/pyenv/1.2.9/completions/pyenv.bash
    [ -f ~/.bashrc ] && . ~/.bashrc
    EOBP
    

    这是一个了解pyenv如何在引擎盖下工作的好机会

    pyenv global
    命令只读取
    /Users/Soma/.pyenv/version
    目录中的数据。它与
    cat/Users/Soma/.pyenv/version
    基本相同

    pyenv versions
    命令仅用于在运行“shim interceptable”命令(如
    Python
    pip
    时)时选择正确的Python版本

    运行
    pyenv global 3.5.0
    时,
    /Users/Soma/.pyenv/version
    文件将更新为包含“3.5.0”。这是pyenv所做的唯一更改。大多数用户对
    pyenv global 3.5.0
    只更改文本文件中的一行感到惊讶

    运行
    python--version
    时,终端将执行与执行任何shell命令相同的步骤:它遍历
    路径中的每个目录,并查找名为
    python
    的第一个可执行文件

    如果键入
    echo$PATH
    ,您将得到如下内容:
    /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

    您的计算机正在
    /usr/bin
    目录中查找
    python
    可执行文件

    Soma-Suzuki:~ Soma$ which python
    /usr/bin/python
    
    您可以将此代码添加到
    ~/.bash\u配置文件中以更改路径

    if command -v pyenv 1>/dev/null 2>&1; then
      eval "$(pyenv init -)"
    fi
    
    重新启动终端,再次运行
    echo$PATH
    ,现在您将看到如下输出:
    /Users/Soma/.pyenv/shimmers:/usr/local/bin:/usr/bin:/usr/sbin:/sbin

    注意现在
    /Users/Soma/.pyenv/shimmes
    目录如何位于
    路径的开头。现在运行
    python--version
    时,该命令将由
    /Users/Soma/.pyenv/shimmes
    中的
    python
    可执行文件处理。该命令将没有机会被
    /usr/bin/python>接收/Users/Soma/.pyenv/shimmes/python
    捕获


    我明白为什么这个bug会让你困惑。除非你知道,否则很难调试它。

    在安装正确的版本后,关闭所有终端并尝试pyenv global 3.7.2,然后尝试python--version,它应该可以工作。

    如果你在过去任何时候都做过
    pyenv local
    ,它将在你的电脑中创建一个新的
    .python\u版本
    文件你的主目录~

    如果开发环境配置不正确,可能会影响pyenv global命令


    删除此文件,pyenv global应该可以工作。

    您可以编辑您的.bashrc文件。使别名python=Python3.5。0@AnakinTung因此,完全破坏了正确的版本控制。根据文档,它应该是在file@Jonathan在终端中输入pyenv init查看是否有必要y要进行的更改。根据给定的文档,将
    eval“$(pyenv init-”
    放在
    .bash_profile
    的末尾。请注意,对我来说,将其放在
    .bashrc
    中不起作用。(如果使用
    .bashrc
    时,文档会警告“奇怪”行为。)运行
    eval“$(pyenv init-”
    在我的情况下不会更改
    python-V
    ,即使我在
    ~/.中安装了pyenv版本。pyenv
    我在中缺少
    导出路径=“$pyenv\u ROOT/PATH:$PATH”
    if command -v pyenv 1>/dev/null 2>&1; then
      eval "$(pyenv init -)"
    fi