简介


之前的文章(Python2还是python3 )中我们提到,建议现在大家都采用python3,因为python2在今年年底将不在维护。但在实际的开发和使用python过程中,我们避免不了还得用到python2,如何让python2和python3共存?之前网上很多教程很多是让配置一个默认的python,然后再配置一个python2,这样输入python调用的是python3,输入python2调用的python2。这样做也可以使用,但是还不够优雅,因为牵扯到很多环境变量的配置。

于是就有人参考ruby的版本管理工具rbenv,开发了可以管理python版本的工具:pyenv。 需要提前说明,pyenv只能用在mac/linux系统使用(本文主要也是基于mac来介绍的),windows系统需要用到另外的工具,文章的最后会做介绍。

pyenv的使用


原理

相信大家都对系统的环境变量PATH比较熟悉,mac通常用:分隔路径(windows是用;分隔)比如:/usr/local/bin:/usr/bin:/bin。当我们在命令行输入某一个命令,比如:python或者pip,系统会去我们配置的环境变量中从左向右依次查找对应的命令,因此排在前面的路径优先级会更高。

pyenv正是利用了这一特性,当用户使用python相关命令时,pyenv会拦截到这一过程,然后将自己管理的python版本的shim目录插入到PATH 中/usr/local/bin:/usr/bin:/bin最前面,这样,当系统去查找python等命令时,就会优先查找pyenv设置的目录,从而达到可以灵活切换python版本的目的。

想了解pyenv实现的同学,可以直接去github上查看其源码及更详细的介绍文档。

安装

pyenv提供了三种方式来安装,这里推荐使用pyenv-installer来安装,因为足够简单,同时还会安装一些比较实用的工具插件:

  • pyenv-doctor  (用于检测pyenv的环境)
  • pyenv-installer
  • pyenv-update   (用于更新)
  • pyenv-virtualenv (用于区分依赖库的不同版本,后面会介绍)
  • pyenv-which-ext  

安装命令如下:

  1. $ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

  # the following to ~/.zshrc:

  export PATH="/Users/xuanke/.pyenv/bin:$PATH"

  eval "$(pyenv init -)"

  eval "$(pyenv virtualenv-init -)"

命令执行完后,没有报错就是安装完成了,不过会提示你需要配置pyenv的环境变量(如上面所示)。其中pyenv init命令是将pyenv的shim目录添加到PATH中。我们可以验证下,修改完.zshrc之后,执行source ~/.zshrc让配置生效,然后我们打印环境变量PATH,如下:

从上图可以看出,pyenv的配置已经被插入到/usr/local/bin:/usr/bin:/bin的前面。

更新

使用pyenv update命令,可对pyenv直接进行升级。

卸载

这里要分两种场景:1)暂时不想用pyenv,但是不想删除。 2)彻底删除。

针对第一种情况,仅仅需要将pyenv init的配置从~/.zshrc中移除,这样就不会将pyenv的shim目录添加到PATH的前面。

针对第二种情况,可以通过删除pyenv实现,命令如下:

  1. # . 删除pyenv的安装目录
  2. $ rm -rf $(pyenv root)
  3.  
  4. # . 删除在~/.zshrc中配置的pyenv环境变量

pyenv主要命令

我们可以执行pyenv -h查看pyenv的主要命令:

pyenv install

pyenv install用于安装对应的python包,同时加上--list参数,可以用来查看可以安装的包列表。

然后用pyenv install + 版本号,就可以安装对应版本的python。

需要注意,有时候需要安装python Framework,则需要使用下面的命令:

  1. PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.6.

pyenv uninstall

用于卸载本地已经安装的python版本

将versions目录下面的对应版本的包删除掉。

pyenv versions

查看本地已经安装可用的python版本,其中前面标*的,是本地当前版本。

pyenv version

用于查看本地当前设置的python版本

python 版本切换

pyenv的版本主要有三个维度:shell、项目目录、全局(global),它们三者的优先级依次降低,即如果设置了shell,又设置了全局的,那么以shell配置的python版本为主。接下来我们看看这三种维度下怎么修改python版本。

如果想要修改全局的python版本,那么可以使用python global pythonVersion,该命令会同步在pyenv的根目录(默认是~/.pyenv/)下创建一个version的文件,文件内容是要切换的python版本号,如下所示:

如果你的某个项目需要特定的python版本,也是可以实现的。可以使用python local pythonVersion,该命令会同步在项目目录下,创建一个.python-version的文件,文件内容是切换的版本号,如下所示:

如果你只希望临时对shell的python版本做变更,可以使用python shell pythonVersion, 该命令会同步在当前的shell窗口创建一个PYENV_VERSION的环境变量,如下图所示。如果重启了shell窗口,或者新建一个shell窗口,则PYENV_VERSION不起作用,也就是其作用域仅仅在当前的shell。如果想取消shell级别的python环境,可以执行命令:unset PYENV_VERSION

我们再来验证下三者的优先级,我们将全局的python版本设置为3.7.4,然后将shell的python版本设置为2.7.16,然后执行pyenv version,如下所示:

从上面的结果可以证明,shell的优先级是要高于全局的。

在windows上使用pyenv

pyenv并没有直接支持windows版本,但是通过pyenv-win项目来支持windows的使用,我们可以通过pip或者直接从github将pyenv-win的代码下载到本地用户目录,一般是:%USERPROFILE%/.pyenv。然后可以将%USERPROFILE%\.pyenv\pyenv-win\bin;%USERPROFILE%\.pyenv\pyenv-win\shims 配置到环境变量PATH的最前面,然后重启命令行窗口,执行:pyenv --version 命令查看pyenv配置是否成功。

pyenv在windows上的使用和mac上类似,因为我没有在windows上对pyenv的命令逐条尝试,所以这里我贴一个github上面的命令使用说明:

一个项目需要多套环境


还有一种场景,假如我们有一个项目,但是这个项目却需要对应两个python环境,这两个环境对应的依赖包肯定是不一样的,这应该怎么办呢?貌似直接通过pyenv没办法实现。 其实上面已经提到过,pyenv提供了一个插件工具pyenv-virtualenv,这个工具可以帮我们实现环境的分离。它的使用方法如下:

  1. $ pyenv virtualenv pythonVersion projectName

其中pythonVersion对应的是python的版本号,projectName对应的是项目的名称(可以带上python版本的标识),比如我们现在有个pythonDemo的项目,我们为他基于python2.x和python3.x创建两套依赖库环境:

从上面我们可以看出,虚拟环境被创建在了pyenv/versions/version/envs目录下。

创建完成后,我们可以通过pyenv virtualenvs查看已经创建的虚拟环境。

之后我们可以通过pyenv activate projectName(比如:pythonDemo_2.7.16) 来切换项目对应的虚拟环境。通过pyenv deactivate来退出虚拟环境。

总结


上面是pyenv的常用的介绍,相信已经可以帮助大家来比较方便的管理python版本,希望大家在之后的工作中能立即使用起来,这样才能将pyenv消化掉,告别依靠各种配置环境变量来管理python版本的方式。

python编程【环境篇】- 如何优雅的管理python的版本的更多相关文章

  1. vim配置python编程环境及YouCompleteMe的安装教程

    python号称人工智能语言,现在可算大热,这篇博客将介绍如何用vim打造一款自己专属的python编程环境. step1 由于安装YouCompleteMe需要vim8.0及以上版本,所以得安装使用 ...

  2. Emacs 配置 Python 编程环境

    python编程环境设置涉及到:自动完成.语法检查.虚拟环境. 为了不把系统搞乱,在python的虚拟环境中安装相关的插件. 一.安装python虚拟环境 virtualenvwrapper sudo ...

  3. 用10分钟,搭建图像处理编程环境,0失败!(python语言,windows系统)

    以前,你可能看过很多的文章,开始搭建一个图像处理的编程环境. 结果,按照教程一步一步做的时候,总是出现各种各样的问题. 就算成功了,后续开发过程中要用到不同版本的opencv,不同版本python,更 ...

  4. 使用UE配置Python编程环境

    一直在使用UE来进行python编程,觉得在UE下进行python编程使用起来还是很方便地,现在特来总结一下: 1.首先是python环境搭建 (1)下载python2.7 https://www.p ...

  5. Spark 的 python 编程环境

    Spark 可以独立安装使用,也可以和 Hadoop 一起安装使用.在安装 Spark 之前,首先确保你的电脑上已经安装了 Java 8 或者更高的版本. Spark 安装 访问Spark 下载页面, ...

  6. 在win10的Linux子系统(WSL)上搭载python编程环境

    为什么使用WSL进行python编程 WSL,全称Windows Subsystem for Linux.简言之,win10提供了一个子Linux系统,可以解决虚拟机和双系统的系统之间阻隔的问题而不影 ...

  7. Python编程环境设置

    第1节.Python编程环境设置 一.sublime相关 1.sublime REPL插件安装 (1)安装 先打开插件安装面板:ctrl+shift+P 输入install ,选择Package Co ...

  8. [零基础学pythyon]安装python编程环境

    不论什么高级语言都是须要一个自己的编程环境的,这就好比写字一样,须要有纸和笔,在计算机上写东西.也须要有文字处理软件,比方各种名称的OFFICE.笔和纸以及office软件,就是写东西的硬件或软件.总 ...

  9. ubuntu 16.04下如何打造 sublime python编程环境

    一.安装python3     ubuntu自身是安装python2的,例如在ubuntu 16.04中安装的就是python2.7.但我想在python3的环境下进行开发所以就要安装python3. ...

随机推荐

  1. Nginx简单介绍以及linux下使用Nginx进行负载均衡的搭建

    1.Nginx简介 Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5 ...

  2. Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

    多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程. 一.ThreadPoolTaskExecutor ...

  3. 【JZOJ4807】破解

    Description 历经千辛万苦,ddddddpppppp 终于找到了IBN5100. dp 事先了解到SERN 共有T 个密码,每个密码是一个长度为N 的01 串,他要利用IBN5100 的特殊 ...

  4. [WPF自定义控件库] 模仿UWP的ProgressRing

    1. 为什么需要ProgressRing 虽然我认为这个控件库的控件需要模仿Aero2的外观,但总有例外,其中一个就是ProgressRing.ProgressRing是来自UWP的控件,部分代码参考 ...

  5. Jenkins源代码管理(SVN)

    Subversion 安装插件 1.首先将本地的自动化用例打包上传svn 2.配置jenkins源代码管理(每次执行jenkins时,会自动check-out配置地址中的代码到Jenkins的工作空间 ...

  6. C语言打印当前所在函数名、文件名、行号

    printf("[%s %s] %s: %s: %d\n", \ __DATE__, __TIME__, __FILE__, __func__, __LINE__); 内核驱动中: ...

  7. 微信小程序尺寸单位rpx以及样式相关介绍

    rpx单位是微信小程序中css的尺寸单位,rpx可以根据屏幕宽度进行自适应.规定屏幕宽为750rpx.如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375p ...

  8. Making Dishes (P3243 [HNOI2015]菜肴制作)

    Background\text{Background}Background I've got that Luogu Dialy has been \text{I've got that Luogu D ...

  9. luogu P4035 [JSOI2008]球形空间产生器

    [返回模拟退火略解] 题目描述 今有 n+1n+1n+1 个 nnn 维的点,它们都在一个球上.求它们所在球的球心. Solution 4035\text{Solution 4035}Solution ...

  10. [Luogu2422]良好的感觉

    题目描述 kkk做了一个人体感觉分析器.每一天,人都有一个感受值Ai,Ai越大,表示人感觉越舒适.在一段时间[i, j]内,人的舒适程度定义为[i, j]中最不舒服的那一天的感受值 * [i, j]中 ...