python编程【环境篇】- 如何优雅的管理python的版本
简介
之前的文章(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
安装命令如下:
$ 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实现,命令如下:
# . 删除pyenv的安装目录
$ rm -rf $(pyenv root) # . 删除在~/.zshrc中配置的pyenv环境变量
pyenv主要命令
我们可以执行pyenv -h查看pyenv的主要命令:
pyenv install
pyenv install用于安装对应的python包,同时加上--list参数,可以用来查看可以安装的包列表。
然后用pyenv install + 版本号,就可以安装对应版本的python。
需要注意,有时候需要安装python Framework,则需要使用下面的命令:
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,这个工具可以帮我们实现环境的分离。它的使用方法如下:
$ 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的版本的更多相关文章
- vim配置python编程环境及YouCompleteMe的安装教程
python号称人工智能语言,现在可算大热,这篇博客将介绍如何用vim打造一款自己专属的python编程环境. step1 由于安装YouCompleteMe需要vim8.0及以上版本,所以得安装使用 ...
- Emacs 配置 Python 编程环境
python编程环境设置涉及到:自动完成.语法检查.虚拟环境. 为了不把系统搞乱,在python的虚拟环境中安装相关的插件. 一.安装python虚拟环境 virtualenvwrapper sudo ...
- 用10分钟,搭建图像处理编程环境,0失败!(python语言,windows系统)
以前,你可能看过很多的文章,开始搭建一个图像处理的编程环境. 结果,按照教程一步一步做的时候,总是出现各种各样的问题. 就算成功了,后续开发过程中要用到不同版本的opencv,不同版本python,更 ...
- 使用UE配置Python编程环境
一直在使用UE来进行python编程,觉得在UE下进行python编程使用起来还是很方便地,现在特来总结一下: 1.首先是python环境搭建 (1)下载python2.7 https://www.p ...
- Spark 的 python 编程环境
Spark 可以独立安装使用,也可以和 Hadoop 一起安装使用.在安装 Spark 之前,首先确保你的电脑上已经安装了 Java 8 或者更高的版本. Spark 安装 访问Spark 下载页面, ...
- 在win10的Linux子系统(WSL)上搭载python编程环境
为什么使用WSL进行python编程 WSL,全称Windows Subsystem for Linux.简言之,win10提供了一个子Linux系统,可以解决虚拟机和双系统的系统之间阻隔的问题而不影 ...
- Python编程环境设置
第1节.Python编程环境设置 一.sublime相关 1.sublime REPL插件安装 (1)安装 先打开插件安装面板:ctrl+shift+P 输入install ,选择Package Co ...
- [零基础学pythyon]安装python编程环境
不论什么高级语言都是须要一个自己的编程环境的,这就好比写字一样,须要有纸和笔,在计算机上写东西.也须要有文字处理软件,比方各种名称的OFFICE.笔和纸以及office软件,就是写东西的硬件或软件.总 ...
- ubuntu 16.04下如何打造 sublime python编程环境
一.安装python3 ubuntu自身是安装python2的,例如在ubuntu 16.04中安装的就是python2.7.但我想在python3的环境下进行开发所以就要安装python3. ...
随机推荐
- Formform
知识预览 一 Django的form组件 二 Django的model form组件 三 Django的缓存机制 四 Django的信号 五 Django的序列化 回到顶部 一 Django的form ...
- Linux内存描述之内存节点node–Linux内存管理(二)
日期 内核版本 架构 作者 GitHub CSDN 2016-06-14 Linux-4.7 X86 & arm gatieme LinuxDeviceDrivers Linux内存管理 #1 ...
- 一文了解 Redis 内存监控和内存消耗
Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多.所以,监控 Redis 的内存消耗并了解 Redis 内存模型对高效并长期稳定使用 Redis ...
- 使用dynamic来简化反射实现,调用指定方法或构造函数
dynamic是Framework4.0的新特性,dynamic的出现让C#具有了弱语言类型的特性,编译器在编译的时候,不再对类型进行检查,不会报错,但是运行时如果执行的是不存在的属性或者方法,运行程 ...
- 从零开始的vue学习笔记(八)
前言 今天花一天时间阅读完Vue Router的官方文档的基础部分,简单的做一下总结和记录 Vue Router是什么 Vue Router 是 Vue.js 官方的路由管理器,用于构建单页应用(SP ...
- Faker——生成测试数据的PHP类库
工作上用的是TP框架,每次测试功能的时候都要手动添加测试数据,词穷起名总是起一些test1.test2这种low到爆炸的用户名,这让我很难受.稍微翻阅了一些资料,发现laravel有一个生成测试数据的 ...
- C语言-正序输出一个一个多位数
//正序输出一个多位数,所有的数字中间用空格分隔 int main() { ;//是可变化的 ; int d; int t =x; //先计算x的位数 ){ t /= ; mask *=; } pri ...
- unittest中diascover批量执行用例
# case_dir='./'#当前脚本的路径 # discover=unittest.defaultTestLoader.discover(case_dir,pattern='unittest_fr ...
- Python爬取猫眼电影100榜并保存到excel表格
首先我们前期要导入的第三方类库有; 通过猫眼电影100榜的源码可以看到很有规律 如: 亦或者是: 根据规律我们可以得到非贪婪的正则表达式 """<div class ...
- 利用Echarts实现全国各个省份数据占比,图形为中国地图
最近项目需求,需要一个对于全国各个省份的数据分析,图形最好是地图的样子,这样子更为直观. 最先想到的图表插件是Echarts,他的文档相对于阿里的G2,G6更加清晰一些.在Echarts 里找到的个 ...