在学习和利用python开发的很多情况下,需要多版本的Python并存。此时需要在系统中安装多个Python,但又不能影响系统自带的 Python。pyenv 就是这样一个 Python 版本管理器。

一、 pyenv介绍

项目地址:https://github.com/pyenv/pyenv

简单的说,pyenv 可以根据需求使用户在系统里安装和管理多个 Python 版本:

  1. 配置当前用户的python的版本
  2. 配置当前shell的python版本
  3. 配置某个项目(目录及子目录)的python版本

    配置多个虚拟环境

pyenv的工作原理:pyenv是利用系统环境变量PATH的优先级,劫持python的命令到pyenv上,根据用户所在的环境或目录,使用不同版本的python。

二、pyenv安装

系统环境:centos 7

  1. 安装git
yum -y install git
  1. 安装python所依赖的库文件
yum -y install gcc make patch openssl-devel sqlite-devel readline-devel  gdbm-devel  zlib-devel bzip2-devel
  1. 安装pyenv
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
  1. 配置环境变量
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> .bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> .bash_profile
echo 'eval "$(pyenv init -)"' >> .bashrc
source .bash_profile

三、pyenv的使用

  1. 查看pyenv支持的python版本,同时也是检查pyenv有没有安装成功

    pyenv install --list
  2. 使用pyenv安装python

    pyenv -v install 3.6.6

    由于这个命令从国外网站下载python的过程比较慢。我们可以在.pyenv/目录创建一个cache目录,并将事先准备好的对应版本python包上传至该目录。

  3. 查看pyenv可检测到的版本,*标示的为当前状态下的激活版本

    [root@localhost ~]# pyenv versions
    * system (set by /root/.pyenv/version)
    3.6.6
  4. 切换python版本

    pyenv可以从三个维度来管理python环境,简称为:当前系统、当前目录、当前shell。这三个维度的优先级从左往右依次升高,即当前系统的优先级最低、当前shell的优先级最高。

    如果想修改系统全局的Python环境,可以采用 pyenv global PYTHON_VERSION 命令。该命令执行后会在 $(pyenv root) 目录(默认为 ~/.pyenv )中创建一个名为 version 的文件(如果该文件已存在,则修改该文件的内容),里面记录着系统全局的Python版本号。

    [root@localhost ~]# pyenv global 3.6.6
    [root@localhost ~]# pyenv versions
    system
    * 3.6.6 (set by /root/.pyenv/version)

    对于特定的项目,我们可能需要切换不同的Python环境,这个时候就可以通过 pyenv local PYTHON_VERSION 命令来修改 当前目录 的Python环境。命令执行后,会在当前目录中生成一个 .python-version 文件(如果该文件已存在,则修改该文件的内容),里面记录着当前目录使用的Python版本号。

    [root@localhost python]# pyenv local 3.6.6
    [root@localhost python]# cat .python-version
    3.6.6

    通过执行 pyenv shell PYTHON_VERSION 命令,可以修改 当前shell 的Python环境。执行该命令后,会在当前 shell session (Terminal窗口)中创建一个名为 PYENV_VERSION 的环境变量,然后在 当前shell 的任意目录中都会采用该环境变量设定的Python版本。此时, global 和 local中设定的Python版本均会被忽略。

    [root@localhost python]# pyenv shell system
    [root@localhost python]# echo $PYENV_VERSION
    system

    退出shell有两个方法,一个是重新打开一个shell,一个就是 pyenv shell --unset(退到了之前global的环境)

    [root@localhost python]# pyenv shell --unset
    [root@localhost python]# pyenv version
    3.6.6 (set by /root/python/.python-version)
  5. 创建虚拟环境

    Python应用程序通常会使用不在标准库内的软件包和模块。应用程序有时需要特定版本的库,因为应用程序可能需要修复特定的错误,或者可以使用库的过时版本的接口编写应用程序。

    这意味着一个Python安装可能无法满足每个应用程序的要求。如果应用程序A需要特定模块的1.0版本但应用程序B需要2.0版本,则需求存在冲突,安装版本1.0或2.0将导致某一个应用程序无法运行。

    解决这个问题的方案是创建一个virtual environment,一个目录树,其中安装有特定python版本,以及许多其他包。

    使用pyenv创建虚拟环境

    [root@localhost python]# pyenv virtualenv 3.6.6 django
    [root@localhost python]# pyenv versions
    system
    * 3.6.6 (set by /root/python/.python-version)
    3.6.6/envs/django
    django
  6. python环境目录

    我们在/root/.pyenv/versions看到我们装的python版本

    [root@localhost versions]# ll
    总用量 0
    drwxr-xr-x. 7 root root 68 4月 11 17:25 3.6.6
    lrwxrwxrwx. 1 root root 39 4月 11 17:25 django -> /root/.pyenv/versions/3.6.6/envs/django

    并且可以发现我们创建的虚拟环境django其实是对应python版本目录下的一个软链接。

四、修改pip源

  1. 有时候我们使用pip安装比较大的第三方模块速度会非常的慢甚至还会失败,是因为pip从默认从国外的pip源下载文件。我们可以通过修改pip源的方式提升pip安装速率。

    cd ~
    mkdir .pip.conf vim .pip.conf
    [global]
    index-url=https://mirrors.aliyun.com/pypi/simple/
    trusted-host=mirrors.aliyun.com

    这样pip命令就会从阿里的pip源上第三方模块了,当然也可以在安装的时候通过-i 参数来指定pip源。

    pip install scipy -i https://pypi.douban.com/simple/
  2. 查看当前环境安装包名字

    pip freeze
    pip list

    pip命令-r参数安装requirement.txt文件上的所有包

    pip freeze > ./requirement.txt
    pip isntall -r ./requirement.txt

python多版本管理工具(pyenv)的更多相关文章

  1. 你应该学会的Python多版本管理工具Pyenv

    目录 Pyenv 简介 安装pyenv 通过pyenv安装python各种发行版 pyenv命令 多版本Python的管理 Pyenv常见问题Wiki Pyenv 简介 首先,该工具是在类linux环 ...

  2. Ubuntu中python多版本管理工具-pyenv

    ubuntu系统版本:16.04 # lsb_release -aNo LSB modules are available.Distributor ID: UbuntuDescription: Ubu ...

  3. python版本管理工具pyenv和包管理工具pipenv

    一.pyenv版本管理工具 pyenv是一个python版本管理工具,可以实现轻松切换多个python版本 它可根据每个用户更改全局python版本,也可以为每个项目指定python版本,还可以管理v ...

  4. Python切换版本工具pyenv

    目录 安装pyenv 安装与查看py版本 切换py版本 结合ide使用示例 和virtualenv的一些区别 参考文献 使用了一段时间,我发现这玩意根本不是什么神器,简直就是垃圾,安装多版本总是失败, ...

  5. 腾讯云服务器ubuntu16.04系统下安装Python版本管理工具pyenv

    一. 系统环境   腾讯云提供的系统是ubuntu 16.04 LTS,系统默认的Python版本是2.7.12,我想要安装3.6和其他的版本.   比较方便的是腾讯云已经默认安装好了git和curl ...

  6. Ubuntu安装Python版本管理工具pyenv

    gyf@gyf-VirtualBox:~$ git clone https://github.com/yyuu/pyenv.git ~/.pyenvCloning into '/home/gyf/.p ...

  7. Python多版本管理器-pyenv 介绍及部署记录

    一. pyenv简单介绍 在日常运维中, 经常遇到这样的情况: 系统自带的Python是2.x,而业务部署需要Python 3.x 环境, 此时需要在系统中安装多个Python版本,但又不能影响系统自 ...

  8. centos下python多版本管理(pyenv+python+virtualenv+ipython)

    pyenv是个多版本python管理器,可以同时管理多个python版本共存,如pypy,miniconde等等 1 环境准备 安装相关软件和pyenv1.1 安装相关软件yum install -y ...

  9. 在Ubuntu 18.04中安装pyenv(Python多版本管理工具)

    最近正在重头梳理Python的基础知识,为了更好地使用Python进行开发,防止发生版本混乱(不同的第三方库有可能因为Python版本不兼容而报错),所以需要使用pyenv进行版本管理. *** 通常 ...

随机推荐

  1. 手把手教你写vue插件并发布(二)

    前记:上一篇 https://www.cnblogs.com/adouwt/p/9211003.html, 说到了一个完整的vue插件开发.发布的流程,总结下来就讲了这么一个事,如何注入vue, 如果 ...

  2. R语言︱LDA主题模型——最优主题...

    R语言︱LDA主题模型——最优主题...:https://blog.csdn.net/sinat_26917383/article/details/51547298#comments

  3. eclipse导入maven时,html页面引入js的路径出现红色波浪线

    用eclipse导入一个springboot项目时,html页面引入js以及css时出现如下图所示情况,html页面用了 thymeleaf模板引擎.另外js文件与css文件路径也是正确无误的. 原来 ...

  4. 常见jquery面试题

    jQuery 面试问题和答案 JavaScript 是客户端脚本的标准语言,而 jQuery 使得编写 JavaScript 更加简单.你可以只用写几行的jQuery 代码就能实现更多的东西. 它是最 ...

  5. docker环境下elasticsearch安装ik和拼音分词

    elasticsearch拼音分词地址:https://github.com/medcl/elasticsearch-analysis-pinyin/releases 在elasticsearch下面 ...

  6. 如何进行PDF页码编排,如何调整PDF页码顺序

    PDF文件的页码顺序如何进行调整?许多小伙伴们都不知道,我们在编辑的时候只知道PDF文件的编辑方法,但是调整页码的顺序我们或许不会,但是如何去进行操作呢?看小编的方法吧!如果我们想要修改PDF文件中的 ...

  7. git 随笔(随时更新)

    w:跳到下个词前面, e:跳到下个词后面,b是跳到上一个单词前面. v:选择 ,可以批量操作 q + a:  录制宏, a 是存录制地方,q录制完毕. @a :执行录制操作. @a 前面➕数字:例如1 ...

  8. day20包

    https://www.cnblogs.com/Eva-J/articles/7292109.html 一.模块: 1.什么是模块:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名 ...

  9. python3学习笔记之十七

    1.  网站本质:通过socket建立连接. 服务端(网站) 1.  先启动并监听:80端口 4.  获取请求信息 请求头 请求体 5.  处理请求 响应内容: 响应头:\r\n\r\n响应体     ...

  10. [转] Ramda 函数库参考教程

    学习函数式编程的过程中,我接触到了 Ramda.js. 我发现,这是一个很重要的库,提供了许多有用的方法,每个 JavaScript 程序员都应该掌握这个工具. 你可能会问,Underscore 和  ...