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

当前回答

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

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

下面是我从高处观察自己的步骤:

运行pyenv init命令的干运行版本,这样您就可以看到 对你有什么好处。 将PATH和shell环境变量放到.bash_profile中 (或者你的发行版使用的任何文件)。 将pyenv init函数打印到你的.bashrc并源你的.bashrc 从您的.bash_profile

这是完成它的一种方法,但最好将其作为“伪代码”使用。你应该把.bash_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

下一部分使用我们从上面第1步的pyenv init演练中复制的新逻辑更新shell。

$ cat <<EORC > ~/.bashrc
# from $(pyenv init -)
pyenv() {
    local command
    command="${1:-}"
    if [ "$#" -gt 0 ]; then
        shift
    fi

    case "$command" in
    rehash|shell)
        eval "$(pyenv "sh-$command" "$@")";;
    *)
        command pyenv "$command" "$@";;
    esac
}
EORC

其他回答

如果你在过去的任何时候对pyenv进行了本地操作,它将在你的主目录~中创建一个新的.python_version文件。

如果您的开发环境没有正确配置,可能会影响pyenv全局命令。

删除这个文件,pyenv global就可以工作了。

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

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

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

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

下面是我从高处观察自己的步骤:

运行pyenv init命令的干运行版本,这样您就可以看到 对你有什么好处。 将PATH和shell环境变量放到.bash_profile中 (或者你的发行版使用的任何文件)。 将pyenv init函数打印到你的.bashrc并源你的.bashrc 从您的.bash_profile

这是完成它的一种方法,但最好将其作为“伪代码”使用。你应该把.bash_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

下一部分使用我们从上面第1步的pyenv init演练中复制的新逻辑更新shell。

$ cat <<EORC > ~/.bashrc
# from $(pyenv init -)
pyenv() {
    local command
    command="${1:-}"
    if [ "$#" -gt 0 ]; then
        shift
    fi

    case "$command" in
    rehash|shell)
        eval "$(pyenv "sh-$command" "$@")";;
    *)
        command pyenv "$command" "$@";;
    esac
}
EORC

试试这个: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

这个答案只适用于使用Fish shell并找到此线程的人。Pyenv使用shims, ref,所以为了让Pyenv与你的fish shell一起工作,你必须编辑你的~/.config/fish/config。fish文件在$PATH变量的开头追加pyen shim目录。这是我的配置。鱼看起来像。

### 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/

and

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

第一个函数为pyenv shim路径创建一个变量,第二个函数将它添加到路径变量的前面。只需保存并关闭,重新启动终端会话,你应该都设置好了。