Mac下使用pyenv安装、管理多个Python版本

一、安装pyevn

~ brew install pyenv

注:也使用Cakebrew安装pyevn

~ pyenv -v
pyenv 1.2.11
~ which pyenv
/usr/local/bin/pyenv
~ pyenv versions
* system (set by /Users/xxx/.pyenv/version)
~ pyenv commands #查看pyenv指令列表

二、查看可安装Python版本

pyenv install --list
Available versions:
2.1.3
......
3.8-dev
activepython-2.7.14
......
anaconda-1.4.0
......
ironpython-dev
......
jython-dev
......
micropython-dev
......
pypy-c-jit-latest
......
pyston-0.5.1
......
stackless-dev
......

三、选择版本进行安装

~ pyenv install 3.7.3
python-build: use openssl from homebrew
python-build: use readline from homebrew
Downloading Python-3.7.3.tar.xz…
-> https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tar.xz
Installing Python-3.7.3…
python-build: use readline from homebrew
Installed Python-3.7.3 to /Users/xxx/.pyenv/versions/3.7.3

#安装完成后执行rehash,刷新pyenv shims
~ pyenv rehash

如果安装失败,报错:mportError: No module named ‘_scproxy’

请参考:macosx-importerror-no-module-named-_scproxy.html

四、查看所有安装的版本

~ pyenv versions
* system (set by /Users/xxx/.pyenv/version)
3.7.3

*表示当前的python版本, 可以看到, 我们还在使用的是默认的system 自带的python版本

五、切换版本的3种方法

1、pyenv global x.x.x(全局设置)

设置或显示系统全局的Python版本。系统全局用系统默认的Python比较好,不建议直接对其操作。如果使用此命令,可以看到所有受到pyenv控制的窗口都受到了影响, 所以尽可能不要用root用户来安装pyenv,否则会影响到之前的系统。

~ python -V
Python 2.7.16

~ pyenv version #查看当前激活的是那个版本的Python
system (set by /usr/local/var/pyenv/version)

~ pyenv global 3.7.3 #全局切换

~ pyenv versions #查看已经安装了那些版本的Python
system
* 3.7.3 (set by /Users/xxx/.pyenv/version)

~ python -V #验证一下是否切换成功
Python 2.7.16

用pyenv versions查看,明明已经切换成功,但是用python -V却还是系统版本。原因是pyenv没有加到$PATH环境变量里去,解决办法如下:

export PYENV_ROOT=~/.pyenv
export PATH=$PYENV_ROOT/shims:$PATH

可以把上边两句加到~/.bash_profile里去,永久生效。

完了之后使用zsh终端发现配置的环境变量还是无效,每次打开zsh都需要手动source ~/.bash_profile

解决方案:

1、修改zsh的配置文件,让其在每次启动的时候来读取~/.bash_profile里面的配置。vim ~/.zshrc 在文件的最后面加上source ~/.bash_profile

2、把下面5行确保写入~/.zshrc底部:

export PYENV_ROOT=”$HOME/.pyenv”

export PATH=”$PYENV_ROOT/bin:$PATH”

if command -v pyenv 1>/dev/null 2>&1; then

eval “$(pyenv init -)”

fi

在使用 pyenv 之前,重新初始化 shell 环境,执行如下命令:
exec $SHELL
不执行该命令也是完全可以的,你可以关闭当前的终端窗口,重新启动一个就可以了。

如果zsh和bash切换着用,那么./zshrc和./bashrc都要改,不然会出现找不到命令的报错。

https://github.com/pyenv/pyenv/blob/master/README.md#basic-github-checkout

2、pyenv local x.x.x(只影响所在文件夹)

设置或显示本地应用程序特定的Python版本。local命令只会对当前的文件夹和其子目录中的版本起作用 ,其他的目录不起作用。用local进行指定版本切换,一般开发环境使用。

~ pyenv local 3.7.3
~ which python
/Users/xxx/.pyenv/shims/python

有时设置了pyenv local版本后,再设置global会发现没有生效,可以尝试:

~ pyenv local --unset

切换版本完成后,输入python即可使用新版本的python;系统自带的脚本会以/usr/bin/python的方式直接调用老版本的python,因而不会对系统脚本产生影响;如果通过homebrew安装python,那么pip会同时安装。

~ pip --version
pip 19.0.3 from /Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/pip (python 3.7)

使用pip安装第三方模块时会安装到~/.pyenv/versions/x.x.x下,不会和系统模块发生冲突。
使用pip安装模块后,可能需要执行pyenv rehash更新数据库。
可以使用pip install –upgrade pip更新到新版本。

pyenv 是支持激活多个 Python 版本的,例如:

pyenv local 2.7.10 3.6.5 3.7.0

另外,不管你装多少个 Python,Pycharm 都可以根据 Project 选择 Python Interpreter(解释器),具体步骤:

打开一个项目,选择file-> Default Settings-> Python Interpreter-> show ALL -> +号 -> Existing environment -> 进行下拉框的选择就OK。之后就可以通过添加完的Python Interpreter选择对应版本的Interpreter进行解释执行了。

3、pyenv shell x.x.x(只影响当前的会话)

设置或显示shell外壳的Python版本。对当前用户的临时设定Python版本,退出后失效。

优先级关系:

shell>local>global

六、切换回系统版本

~ pyenv global system

七、卸载某个版本的python

~ pyenv uninstall x.x.x

接下来,您可能还想看这篇文章:

Python虚拟环境virtualenv的安装和使用


已发布

分类

来自

标签:

评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注