mac下利用pyenv管理多个版本的python

前言

常常遇到这样的状况:python

  • 系统自带的Python是2.x,本身须要Python 3.x;
  • 某些机器学习的框架(如PaddlePaddle/Tensorflow)须要的版本是python3.5,可是你的系统支持的python版本较高,且没法删除(由于某些软件会和python产生依赖)

此时须要在系统中安装多个Python,但又不能影响系统自带的Python,即须要实现Python的多版本共存。pyenv就是这样一个Python版本管理器。 pyenv能够进行全局的 Python 版本切换,也能够给单个项目提供对应的 Python 版本。用了 「pyenv」之后,就能够很容易的安装不一样的 Python 版本,不一样版本之间的切换也变得 so easy。git

注意

Pyenv只会管理经过Pyenv安装的Python版本,你本身在Python官网上下载的直接安装的Pyenv并不能被管理!!!一样除了系统自带的python包外,其余直接安装的python包是识别不出来的,即便使用的brew安装的也识别不出来.github

pyenv的安装

  1. 安装工具:brew
  2. 系统环境:

经过homebrew安装

brew install pyenv
复制代码

可是github提示了一句话shell

After installation, you'll need to add eval "$(pyenv init -)" to your profile (as stated in the caveats displayed by Homebrew — to display them again, usebrew info pyenv). You only need to add that to your profile once.数据库

意思就是说咱们须要在profile文件里面添加一句bootstrap

eval "$(pyenv init -)" 
复制代码

博主亲测,若是没有这一步,后面执行pyenv global [version]是不会成功的。bash

编辑.bash_profile文件


在终端中输入以下命令,进入当前用户的Home目录框架

cd ~ 
复制代码

输入以下命令,打开.bash_profile文件机器学习

open .bash_profile
复制代码

如不存在,则输入以下命令,建立文件工具

touch .bash_profile
复制代码

编辑文件

open -e .bash_profile
复制代码

在弹出的.bash_profile文件中新增

eval "$(pyenv init -)"
复制代码

command + s 保存文件,而后在终端中输入以下命令,刷新以前配置的.bash_profile文件.

source .bash_profile
复制代码

验证pyenv是否安装成功

执行以下命令:

pyenv --help
复制代码

上面命令行的意思是获取 prenv 的帮助信息。

pyenv的经常使用命令

上图是官方文档中的例子,如下是整理的一些pyenv的经常使用命令,若是想要查看完整命令列表,能够点击查看pyenv命令列表

  • 查看pyenv支持哪些Python版本
pyenv install --list
复制代码

查看能够安装的版本

  • 查看已经安装的python版本
pyenv versions
复制代码

查看已经安装的版本

  • 查看当前使用的python版本
pyenv version
复制代码

查看当前使用的Python版本

  • 安装一个python版本如3.5.6
pyenv install 3.5.6
复制代码
  • 安装完成以后须要对数据库进行更新:
pyenv rehash
复制代码
  • 卸载一个python版本如3.5.6
pyenv uninstall  3.5.6
复制代码
  • 设置全局python版本如3.5.6
pyenv global 3.5.6
//不少人不推荐这么作,说是mac操做系统的文件也会调用原生的2.7的python版本
//这种说法感受有点:恐惧来自未知的感受.持保留意见
复制代码
  • 这个时候确认一下当前python的版本

确认当前python的版本
发现已经更改成3.5.6了

  • 设置目录级python版本如3.5.6
pyenv local 3.5.6

复制代码
  • 为当前shell会话设置python版本如3.5.6
pyenv shell 3.5.6

复制代码

常见问题解决

  1. pyenv install [version]下载太慢 只须要在python的官网下载你须要的python版本的tar.xz文件而后放到 /User/.pyenv/cache中而后再执行pyenv install [version]就能够了

下载第二个文件

在这里提一下:/.pyenv 在mac中是隐藏文件夹,mac显示隐藏文件夹的快捷键是:shift+command+.

  1. 出现 zipimport.ZipImportError: can't decompress data; zlib not available 的问题
~ pyenv install 3.5-dev
Cloning https://hg.python.org/cpython...
Installing Python-3.5-dev...
 
BUILD FAILED (OS X 10.11.6 using python-build 20150818)
 
Inspect or clean up the working tree at /var/folders/23/4kbs9t712jv1mvmw6cpjwr2m0000gn/T/python-build.20160815000934.22185
Results logged to /var/folders/23/4kbs9t712jv1mvmw6cpjwr2m0000gn/T/python-build.20160815000934.22185.log
 
Last 10 log lines:
  File "/private/var/folders/23/4kbs9t712jv1mvmw6cpjwr2m0000gn/T/python-build.20160815000934.22185/Python-3.5-dev/Lib/ensurepip/__main__.py", line 4, in <module>
    ensurepip._main()
  File "/private/var/folders/23/4kbs9t712jv1mvmw6cpjwr2m0000gn/T/python-build.20160815000934.22185/Python-3.5-dev/Lib/ensurepip/__init__.py", line 209, in _main
    default_pip=args.default_pip,
  File "/private/var/folders/23/4kbs9t712jv1mvmw6cpjwr2m0000gn/T/python-build.20160815000934.22185/Python-3.5-dev/Lib/ensurepip/__init__.py", line 116, in bootstrap
    _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
  File "/private/var/folders/23/4kbs9t712jv1mvmw6cpjwr2m0000gn/T/python-build.20160815000934.22185/Python-3.5-dev/Lib/ensurepip/__init__.py", line 40, in _run_pip
    import pip
zipimport.ZipImportError: can't decompress data; zlib not available make: *** [install] Error 1 复制代码

解决方案参考#451 用以下命令就能够解决了:

~ CFLAGS="-I$(brew --prefix openssl)/include -I$(xcrun --show-sdk-path)/usr/include" \
  LDFLAGS="-L$(brew --prefix openssl)/lib" \
  pyenv install -v 3.5-dev

复制代码
  1. pyenv global [verion]命令失效 这个问题我已经在上面说过了,须要在bash_profile文件里面添加一句
eval "$(pyenv init -)" 

复制代码

添加方式上面已经详细介绍过了。

最后

本文参考:

  1. Simple Python Version Management: pyenv
  2. Mac下 Pyenv 的安装使用
相关文章
相关标签/搜索