我想用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
这个答案只适用于使用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路径创建一个变量,第二个函数将它添加到路径变量的前面。只需保存并关闭,重新启动终端会话,你应该都设置好了。
这个答案只适用于使用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路径创建一个变量,第二个函数将它添加到路径变量的前面。只需保存并关闭,重新启动终端会话,你应该都设置好了。
仅供参考,如果你的可执行文件早于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)"