Mac上安装多个版本的Python

2018/10/26 posted in  Python

简介

利用Mac包管理工具brew安装pyenv,pyenv用来管理所有python版本。如果没有安装brew,先安装一下吧。


安装pyevn

$ brew install pyenv
$ pyenv -v
pyenv 1.2.6

查看所有的python版本(pyenv管理的所有版本)

$ pyenv versions
* system (set by /Users/xxx/.pyenv/version)
* 表示当前正在使用的版本,system表示用的是系统python版本

查看可安装python版本

$ pyenv install --list
Available versions:
  2.1.3
  2.2.3
  2.3.7
  ...

选择版本进行安装

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

墙内环境,会卡在这里,可以开代理,或者使用国内镜像。
使用国内镜像:

v=3.5.5|wget http://mirrors.sohu.com/python/$v/Python-$v.tar.xz -P ~/.pyenv/cache/;pyenv install $v
查看所有安装的版本
$ pyenv versions
* system (set by /Users/xxx/.pyenv/version)
  3.5.5

可以看到多了一个3.5.5版

我在这一步进行安装的时候出现了一个错误如下:

ownloading Python-3.4.1.tgz...-https://yyuu.github.io/pythons/44a3c1ef1c7ca3e4fd25242af80ed72da941203cb4ed1a8c1b724d9078965dd8
Installing Python-3.4.1...

BUILD FAILED (OS X 10.9.5 using python-build 20150124)

Inspect or clean up the working tree at /var/folders/zf/1b6kcyd53hg0crv65j108_7m0000gn/T/python-build.20150127150918.87726
Results logged to /var/folders/zf/1b6kcyd53hg0crv65j108_7m0000gn/T/python-build.20150127150918.87726.log

Last 10 log lines:
  File "/private/var/folders/zf/1b6kcyd53hg0crv65j108_7m0000gn/T/python-build.20150127150918.87726/Python-3.4.1/Lib/ensurepip/__main__.py", line 4, in <module>
    ensurepip._main()
  File "/private/var/folders/zf/1b6kcyd53hg0crv65j108_7m0000gn/T/python-build.20150127150918.87726/Python-3.4.1/Lib/ensurepip/__init__.py", line 209, in _main
    default_pip=args.default_pip,
  File "/private/var/folders/zf/1b6kcyd53hg0crv65j108_7m0000gn/T/python-build.20150127150918.87726/Python-3.4.1/Lib/ensurepip/__init__.py", line 116, in bootstrap
    _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
  File "/private/var/folders/zf/1b6kcyd53hg0crv65j108_7m0000gn/T/python-build.20150127150918.87726/Python-3.4.1/Lib/ensurepip/__init__.py", line 40, in _run_pip
    import pip
zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [install] Error 1

使用如下命令即可成功

CFLAGS="-I$(xcrun --show-sdk-path)/usr/include" pyenv install -v 3.4.1

切换版本

$ pyenv global 3.5.5 # 全局切换
$ python -V # 验证一下是否切换成功

此处用也可用local,只对当前目录生效

$ pyenv local 3.5.5 # 当前目录及其目录切换
$ python -V # 验证一下是否切换成功

此处有坑!

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

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

此时,再次查看python -V,已经成功切换到pyenv指定的版本。

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

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

pyenv local --unset

解除local设置。

要切换回系统版本,用同样命令:

$ pyenv global system

卸载python版本

$ pyenv uninstall 3.5.5

查看pyenv指令列表

$ pyenv commands
--version
commands
completions
exec
global
help
hooks
init
install
local
prefix
realpath.dylib
rehash
root
shell
shims
uninstall
version
version-file
version-file-read
version-file-write
version-name
version-origin
versions
whence
which

Reference