Python版本管理:pyenv和pyenv-virtualenv(MAC、Linux)、virtualenv和virtualenvwrapper(windows)

96
inke
0.8 2017.03.02 20:38* 字数 2996

Python版本管理:pyenv和pyenv-virtualenv(MAC、Linux)、virtualenv和virtualenvwrapper(windows)

  • 更新日志:
    • 2017年08月16日 更新linux环境需要的编译环境
    • 2017年07月16日 更新:重装 mac 安装 pyenv 遇到问题,安装作者推荐的环境。
    • 2017年03月24日 更新:windows python多版本教程

由于简书不支持目录结构,为了让大家更好的找到自己需要的东西,请看目录截图:

image.png

[toc]

MAC/Linux 教程(推荐)

简介

pyenv
https://github.com/yyuu/pyenv

pyenv-virtualenv
https://github.com/yyuu/pyenv-virtualenv

pyenv的作者:Yamashita, Yuu

由于Python的版本太多且比较杂,所以每个公司和项目可能采用的不同的版本进行开发,此时就需要多版本进行管理的必要性。

pyenv(不支持Windows,原因滑动到最后)

作用:可以在同一个环境安装多个不同的Python版本,通过指令随时随地的切换不同的Python版本

但是又会出现一个新的问题,一个容器中虽然有不同的python版本,但是不同的项目使用的Python第三方库的版本可能不同,此时需要每个项目都有一个独立的Python才能满足需求。此时就是大名鼎鼎的virtualenv了。

virtualenv和pyenv-virtualenv

作用:可以给某个目录创建独立的Python版本。

virtualenv项目,可以实现以上功能,但是牛逼的是pyenv也集成了这个插件,可以通过pyenv直接管理virtualenv

废话不多说,也不讲解实现的原理了,一个字就是:

如何安装pyenv

懒人使用:自动安装脚本:
https://github.com/yyuu/pyenv-installer

Linux 和 OSX 都通用的方式:

  • 第一步:下载pyenv 的代码到~/.pyenv目录下

      git clone https://github.com/yyuu/pyenv.git ~/.pyenv
    


  • 第二步:添加环境变量

    OSX 一般会用bash终端和zsh终端,如何查询自己用了哪个终端,在终端中使用:echo $SHELL 指令。

      echo $SHELL
      /bin/zsh
    

    Zsh注意:
    把下面指令的~/.bash_profile修改为~/.zshrc或者~/.zshenv,建议使用zshrc(zsh默认启动会执行该脚本)。

Ubuntu和Fedora注意:
把下面指令的~/.bash_profile修改为~/.bashrc

    echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
    echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile


  • 第三步:启动shell 的时候,使初始化pyenv。

      echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
    

    Zsh注意:修改您的~/.zshenv或者~/.zshrc,而不是~/.bash_profile
    Ubuntu和Fedora注意:修改您的~/.bashrc文件而不是~/.bash_profile


  • 第四步:重新启动shell,以使路径更改生效。

      exec $SHELL
    


强烈建议安装:

如果不想使用中出现莫名其妙的问题,作者要求安装的环境:

pyenv将尽力下载和编译所需的Python版本,但由于未满足的系统依赖关系,编译失败,或者编译成功,但新的Python版本在运行时显示出奇怪的错误。以下说明是我们针对正确构建环境的建议。

  • Mac OS X环境:
    需要安装Xcode Command Line Tools和Homebrew
    Xcode Command Line Tools安装指令:

    xcode-select --install
    

    Homebrew安装指令:

    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    

    以下是可选安装:

    brew install openssl readline xz
    

其它系统环境的问题,在https://github.com/pyenv/pyenv/wiki查找即可。

  • linux环境:
    Ubuntu/Debian:

    sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
    libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
    xz-utils tk-dev
    

    Fedora/CentOS/RHEL:

    dnf install zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel xz xz-devel
    

    NOTE: libssl-dev is required when compiling Python, installing libssl-dev will actually install zlib1g-dev, which leads to uninstall and re-install Python versions (installed before installing libssl-dev). On Redhat and derivatives the package is named openssl-devel.



pyenv的使用

此时准备工作已经完成,我们可以使用pyenv了:

pyenv 指令集:
https://github.com/yyuu/pyenv/blob/master/COMMANDS.md

  • 介绍下常用指令集:
    • pyenv commands
    • pyenv local
    • pyenv global
    • pyenv shell
    • pyenv install
    • pyenv uninstall
    • pyenv rehash
    • pyenv version
    • pyenv versions
    • pyenv which
    • pyenv whence
  • 查询所有可以安装的版本:

    pyenv install --list
    Available versions:
      2.1.3
      ...
      2.7
      2.7.1
      2.7.2
      ...
      3.2-dev
      3.2
      ...
      3.5.0
      3.5-dev
      ...
      3.6.0
      3.6-dev
      3.7-dev
      ...
    
    
  • 安装所需的版本:

      pyenv install 2.7.6
      pyenv install 2.6.8
    

    如果遇到问题:
    例如:zipimport.ZipImportError: can't decompress data; zlib not available,请回到上面安装建议的环境。

  • 卸载特定的Python版本。

    pyenv uninstall
    
  • 显示当前活动的Python版本

    pyenv version
    2.7.6 (set by /home/yyuu/.pyenv/version)
    
  • Python的全局设置,整个系统生效

    pyenv global 2.7.6
    
  • Python的局部设置,当前目录生效

    pyenv local 2.7.6
    
  • 取消设置

    pyenv local --unset
    

高级用法

您可以一次将多个版本指定为本地Python。

假设你有两个版本的2.7.6和3.3.3。如果你喜欢2.7.6超过3.3.3,

pyenv local (高级)

pyenv local 2.7.6 3.3.3
pyenv versions
  system
* 2.7.6 (set by /Users/yyuu/path/to/project/.python-version)
* 3.3.3 (set by /Users/yyuu/path/to/project/.python-version)
python --version
Python 2.7.6
python2.7 --version
Python 2.7.6
python3.3 --version
Python 3.3.3

或者,如果你喜欢3.3.3超过2.7.6,

pyenv local 3.3.3 2.7.6
pyenv versions
  system
* 2.7.6 (set by /Users/yyuu/path/to/project/.python-version)
* 3.3.3 (set by /Users/yyuu/path/to/project/.python-version)
  venv27
python --version
Python 3.3.3
python2.7 --version
Python 2.7.6
python3.3 --version
Python 3.3.3

pyenv global (高级)

您可以同时将多个版本指定为全局Python。

假设你有两个版本的2.7.6和3.3.3。如果你喜欢2.7.6超过3.3.3,

pyenv global 2.7.6 3.3.3
pyenv versions
  system
* 2.7.6 (set by /Users/yyuu/.pyenv/version)
* 3.3.3 (set by /Users/yyuu/.pyenv/version)
python --version
Python 2.7.6
python2.7 --version
Python 2.7.6
python3.3 --version
Python 3.3.3

或者,如果你喜欢3.3.3超过2.7.6,

pyenv global 3.3.3 2.7.6
pyenv versions
  system
* 2.7.6 (set by /Users/yyuu/.pyenv/version)
* 3.3.3 (set by /Users/yyuu/.pyenv/version)
  venv27
python --version
Python 3.3.3
python2.7 --version
Python 2.7.6
python3.3 --version
Python 3.3.3

如何安装pyenv-virtualenv(pyenv的插件)

重要说明: 如果将pyenv安装到非标准目录中,请确保将此repo克隆到您安装到的任何位置的“plugins”目录中,默认使用(~/.pyenv)。

Linux 和 OSX 都通用的方式:

git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
  • 第一步:
  • 第二步:virtualenvs的自动激活,就是当你进入到你自己设置过的Python版本的目录下,自动切换到virtualenvs的模式,此时你的相关命令只在当前virtualenvs下有效果。
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile

Zsh注意:修改您的~/.zshenv或者~/.zshrc,而不是~/.bash_profile
Ubuntu和Fedora注意:修改您的~/.bashrc文件而不是~/.bash_profile

  • 第三步:重新启动shell,以使路径更改生效。

      exec $SHELL
    

pyenv-virtualenv的使用

要为使用pyenv的Python版本创建virtualenv,请运行 pyenv virtualenv,指定所需的Python版本和virtualenv目录的名称。

  • 从当前版本创建virtualenv
pyenv virtualenv venv27

如果只有一个参数pyenv virtualenv,virtualenv将使用给定的名称创建,基于当前的pyenv Python版本。

  • 制定版本创建virtualenv
pyenv virtualenv 2.7.13 venv27
  • 列出现有virtualenvs

pyenv virtualenvs显示现有virtualenv和conda环境的列表。

pyenv shell venv34
pyenv virtualenvs
  miniconda3-3.9.1(从/home/yyuu/.pyenv/versions/miniconda3-3.9.1创建)
  miniconda3-3.9.1 / envs / myenv(从/home/yyuu/.pyenv/versions/miniconda3-3.9.1创建)
  2.7.10 / envs / my-virtual-env-2.7.10(从/home/yyuu/.pyenv/versions/2.7.10创建)
  3.4.3 / envs / venv34(从/home/yyuu/.pyenv/versions/3.4.3创建)
  my-virtual-env-2.7.10(从/home/yyuu/.pyenv/versions/2.7.10创建)
* venv34(从/home/yyuu/.pyenv/versions/3.4.3创建)

每个virtualenv有两个条目,较短的一个只是一个符号链接。

  • 激活virtualenv

如果eval "$(pyenv virtualenv-init -)"在shell中配置,pyenv-virtualenv将在进入/离开包含.python-version列出有效虚拟环境的文件的目录时自动激活/停用virtualenvs。
看图效果:

python-version文件表示本地Python版本,可以使用pyenv local命令创建和删除。

您还可以手动激活和停用pyenv virtualenv:

pyenv activate virtualenv的名称 
pyenv deactivate
  • 删除现有virtualenv
pyenv uninstall my-virtual-env

前方高能:

说道Windows平台了,悲剧的是大神比较吊,说他不用Windows,兼容Windows浪费大神时间,哈哈。


花了一下午整理和写博客,不要吝啬你的赞、评论和 打赏 😜。



windows 教程

因为大部分小伙伴使用的是 windows 电脑,所以我又回到我的神舟笔记本,实验后更新该博客。

这是我安装的两个 python 版本,一个是2.7的一个是3.5.2的,因为是以前学习安装的,没有安装目前最新的3.6.0,但是多版本管理是一样的。

如何切换版本

如何在 python2python3 中自如的切换版本呢?
其实很简单,使用参数制定即可。

因为 windows 下的 shell 很难用,所以我们用 cmd 命令行

使用 py -2 制定 python2 的环境,使用 py -3 制定 python3 的环境。

使用pip安装库

安装到Python 2 时,就使用 pip2 install [name],例如:pip2 install virtualenv

安装到Python 3 时,就使用 pip3 install [name],例如:pip3 install virtualenv

安装virtualenv

VirtualEnv可以方便的创建独立虚拟的Python环境,然后在每个环境中安装独立的需要的软件包(配合 pip 使用),这一系列的环境是相互隔离的。
多个项目部署在一台机器上的时候,很实用。

安装指令:

因为 python3 性能比较高,以下我都以 python3 作为优先演示

安装到Python 3 时,pip3 install virtualenv

安装到Python 2 时,pip2 install virtualenv

Pip2 安装使用的是 Pip3 刚刚下载的缓存安装的,所以没有下载安装,而是直接安装了。

黄色的警告还提示,目前最新的pip9.0.1,建议升级,使用命令:python -m pip install --upgrade pip,但是我们指定 Python2pip,需要使用指令: py -2 -m pip install --upgrade pip

我们查看下,我们的virtualenv是否安装成了

此时我们就可以使用了,但是这样创建好虚拟 python 空间,还要手动激活,特别反人类的操作,所以我们还要安装virtualenvwrapper,更好的使用。

例如:

  1. 先创建虚拟空间

    指令:
    virtualenv -p C:\dev\Python35-32\python.exe venv35

    上面的C:\dev\Python35-32\python.exe是我的 python 安装目录,大家对应自己的目录即可。

    命令解释:
    virtualenv -p [制定 python 的版本路径] [python 虚拟空间的名称]

    python 虚拟空间的名称:随便取,我习惯加上 python 的版本或者项目缩写

  2. 再激活

确实很麻烦,我们继续安装virtualenvwrapper,提高使用效率。



安装 virtualenvwrapper

安装指令:

因为 python3 性能比较高,以下我都以 python3 作为优先演示

安装到Python 3 时,pip3 install virtualenvwrapper-win

安装到Python 2 时,pip2 install virtualenvwrapper-win

因为我的 python3 是后安装的,所以默认是python 是3.5的,所以不指定参数是创建 python3 的,如下:

大家可以看到,我们创建成功后,就自动激活虚拟空间了,我们想要指定对应 python 版本进行创建 python 虚拟环境,如下:

windows 上我安装的 python2 和 python3 的位置是:

C:\dev\Python27\python.exe
C:\dev\Python35-32\python.exe

大家可自行找自己的安装位置,然后根据我的配置改成自己的路径即可。

默认创建的虚拟环境位于C:\Users\username\envs,可以通过环境变量 WORKON_HOME 来定制。username是你的计算机用户名。
通过计算机-->属性-->高级系统设置-->环境变量-->在系统变量中新建“变量名”:WORKON_HOME,变量值:“你自定义的路径”。

-w400

注意:

此时我们的配置结束了,我们项目中,开发或者部署的时候,进入项目目录下,然后激活虚拟模式,就可以在当前虚拟的 python 环境下做任何事情。

常用的 virtualenvwrapper 指令:

  • mkvirtualenv [指定的 python 路径] [虚拟空间名称]

    • 例如:
    mkvirtualenv -p C:\dev\Python27\python.exe venv27
    
  • 激活虚拟环境 / 切换环境

    • 例如:
    workon env1
    workon env2
    

    ps:mac 或者 linux 的 pyenv 很智能,进入目录自动激活,退出目录自动退出模式。

  • 进入虚拟环境目录
    进入当前环境的目录。

    cdvirtualenv
    
  • 列出已有环境

    workon
    
  • 退出环境

    deactivate
    
  • 删除环境

    rmvirtualenv
    
  • 复制虚拟环境:

    cpvirtualenv env1 env3
    

花了一下午整理和写博客,不要吝啬你的赞、评论 和 打赏 😜。

Python