8

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

 3 years ago
source link: https://xushanxiang.com/2019/11/mac-pyenv-python.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一、安装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 -)”

在使用 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的安装和使用


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK