无法使用pyenv切换Python
我想使用pyenv切换python2和python3 我用以下代码成功下载了python2、python3和pyenv无法使用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$
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 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