一句话解释pyenv是什么?
pyenv就是一个python的版本管理工具,注意是python版本管理工具,不是用pip安装的插件管理工具,既然pyenv能管理python的版本,那么在哪些情况下需要用到呢?
使用pyenv的场景(如果有以下使用场景,那么部署环境之前先安装pyenv)
- Python解释器多版本, 2.0和3.0差别巨大, 而且细分版本也不尽相同, 难以选择和管理.
- 不同Linux发行版自带Python不同, 如ubuntu16自带2.7和3.5版本, 其中系统许多组件依赖于自带解释器, 一旦删除或者更改都可能会造成系统出问题,执行yum命令的Linux系统都依赖python解释器,删除python解释器后yum无法正常使用.
- 不同的Python解释器软件包管理也是问题, 如pip和ipython等必备包组件, 而且在项目开发中如何保证不同的包环境互不干扰也是一个问题.
- 在一套开发环境中需要部署多个不同版本的python解释器
pyenv多版本管理的核心功能是如何做到的?
我们知道, 在终端窗口(linux)中输入一个命令比如‘ls’时, shell会从当前环境的PATH中的各个目录里看是不是有ls这个可执行文件, 如果找到就执行, 否则就会报‘command no found’ 的错误, 同理, 只要控制PATH变量就能够做到python版本的切换, pyenv通过在PATH头部插入shims路径来实现对python版本的控制.
pyenv常用命令笔记
下面的操作会经常用到,可以提前理解一下是什么意思
查看当前目录下使用的python版本
pyenv version
查看可供pyenv使用的python版本,也就是pyenv中已经安装好的python版本
pyenv versions
查看pyenv支持安装的python版本
pyenv install --list
在pyenv环境中安装python版本
pyenv install 3.5.2
卸载pyenv中安装的python解释器
pyenv uninstall <python版本>
设置全局python版本,可以理解为在任意目录下打开CMD命令下的python版本
pyenv global <python版本>
设置局部python版本,可以理解为只对当前目录生效的python版本,更换目录后使用global全局版本
pyenv local <python版本>
创建虚拟环境,pyenv支持与virtualenv虚拟环境一起使用,后面会用到pipenv,所以此命令使用不多
pyenv virtualenv <python版本> <环境name>
列出当前虚拟环境
pyenv virtualenvs
进入虚拟环境
pyenv activate <环境name>
退出虚拟环境
pyenv deactivate
删除虚拟环境
pyenv uninstall <环境name>
安装开始(win环境/Linux环境)
windows环境
windows上基础python 3.7.3版本(具体python版本不限制,最好3.0以上)
windows版本:10、11(win11测试正常)
操作终端:cmd命令行
步骤一:在系统中安装基础python环境
进入python的官网下载基础python 3.7.3版本并安装
这里提供一个淘宝镜像源【https://npm.taobao.org/mirrors/python/】给大家下载,比官网下载要快
看到python -V运行后成功输出python版本号则安装成功,如果发现命令无法运行,这是因为在安装的时候没有勾选Add Python 3.7 to PATH导致没有添加环境变量,此时有2种做法:
- 卸载之后重新来一次
- 找到python的安装路径,把python的环境变量添加到PATH中即可(这里不在演示手动添加环境变量操作,请自行百度)
步骤二:开始在python基础环境之上安装pyenv
完成步骤一之后,那么pip命令便可以正常使用了,如果无法正常使用,那是python的PATH环境变量有问题,请重新看步骤一
进入CMD窗口执行以下命令:
pip install pyenv-win --target %USERPROFILE%/.pyenv
Microsoft Windows [版本 10.0.22000.282]
(c) Microsoft Corporation。保留所有权利。
C:\Users\admin>python -V
Python 3.7.3
C:\Users\admin>pip install pyenv-win --target %USERPROFILE%/.pyenv
细心的朋友可以发现,这里安装的是pyenv-win这个三方库,特别说明下win环境下名为:pyenv-win,Linux环境下名为:pyenv,而且Linux的安装方式也不太一样,这里的命令给大家解读以下,pip install是python安装三方库的标准格式 --target 这个参数是指定安装目录到【%USERPROFILE%/.pyenv】下具体%USERPROFILE%是什么目录,你可以打开你的windows资源管理器输入一下试试看就清楚在哪了,下面给出一个示例图:
那么也很好理解了
%USERPROFILE%/.pyenv路径等同于C:\Users\【你的win用户】\ .pyenv,具体的安装路径直接抄或者自己手动改
此时安装完成pyenv之后,你使用pip list命令来查看安装的第三方库会发现没有pyenv,不用着急,这是正常现象,pyenv不会体现在pip的安装列表中
无需惊慌,在windows的资源管理器中输入%USERPROFILE%/.pyenv,你会找到刚刚安装好的pyenv
步骤三:给pyenv配置运行环境变量(最重要的一环,pyenv能否运行全看这步骤)
打开windows系统环境变量设置
在资源管理器中复制之前的安装路径:%USERPROFILE%/.pyenv/pyenv-win路径或C:\Users\【你的win用户】\ .pyenv\pyenv-win
%USERPROFILE%\.pyenv\pyenv-win
C:\Users\lifan\.pyenv\pyenv-win
-
变量
把PYENV添加到系统变量
。注意不是用户变量
。
变量名:PYENV
变量值:C:\Users\lifan\.pyenv\pyenv-win
这里填写你的pyenv路径
path添加
把下面的两个路径,添加到PATH变量里面即可。可以添加到用户变量的PATH(也可以支持系统PATH,最好是系统PATH)
%PYENV%\bin
%PYENV%\shims
可能windows打开的窗口可能会不太一样,如果是单行的,直接用;
号分割;%PYENV%\bin;%PYENV%\shims
填写到变量值的开头、开头、开头(重要的事情说三遍)
如果是多行的表单窗口,直接点
新建
按钮,新建填写完成后将2个变量上移到最顶层,其他的变量不要乱动(注意天坑:win环境的bin与shims这2个环境变量要配置在最顶层,否则会导致你的通过pyenv切换版本失效,为什么呢?因为win环境的环境变量是从上往下执行的,如果bin与shims配置在最下面,那么版本切换后你使用python命令进行测试,python的命令始终会去执行3.7.3的基础版,无法执行到shims目录下,会导致版本切换始终是失败的,)
环境测试结果:
- win10环境配置用户变量PATH或系统PATH最顶层切换成功
- win11环境配置用户变量PATH最顶层切换失败,只有配置系统PATH最顶层切换成功,这里需要格外注意,不清楚为什么win11会这样
- 测试是否安装成功(不成功的从1、2重来)
重新打开CMD窗口,环境变量修改之后新的CMD窗口才会生效,所以要开一个新CMD窗口,输入命令:pyenv --version
pyenv --version
- 可以查看pyenv中都有哪些python解释器支持一键安装,命令:
pyenv install --list
,可以看出,所有的python解释器是从python的官网下载的,如果觉得慢,可以替换成淘宝镜像源
pyenv install --list
步骤四:替换淘宝镜像源(觉得自己网快、怕出错、找不到,可以忽略该步骤)
- 老版本进入
C:\Users\lifan\.pyenv\pyenv-win\libexec
目录找到pyenv-install.vbs
文件 - 新版本进入
C:\Users\admin\.pyenv\pyenv-win\libexec\libs
目录找到pyenv-install-lib.vbs
文件
文件中有https://www.python.org/ftp/python下载地址 替换成 https://npm.taobao.org/mirrors/python/即可
CMD新窗口重新输入
pyenv install --list
发现地址已被替换,修改成功步骤五:测试2个python解释器通过pyenv安装是否成功,切换是否成功
重新开CMD窗口,这里为了演示截图所以重开,输入python -V
,当系统只有基础python环境3.7.3
在此基础上通过pyenv安装一个python2.6版本与python3.6.8版本,命令如下:
pyenv install 2.6
pyenv install 3.6.8
期间出了点小失误,下图可以看出,在安装2.6版本的python的时候,虽然info中引用的是淘宝的镜像地址,但是实际下载的还是官方的地址,此时会导致安装包无法正常下载,打开C:\Users\lifan\.pyenv\pyenv-win
地址,找到.versions_cache.xml
文件,这个文件是记录所有python解释器的下载地址用的,把此文件删除,然后执行pyenv update
重新生成一个.versions_cache.xml
文件即可
执行完成后,重新查看
.versions_cache.xml
文件,发现地址已经全部是淘宝镜像的地址了重新执行安装命令,秒下载
安装完成后通过
pyenv versions
来查看已安装的python解释器版本
pyenv versions
可以在上图中看到,我当前的系统中除了基础版3.7.3(基础版不显示,只有你知道,pyenv是不知道基础版这个东西的)之外,新安装了2套python解释器,一个是2.6,一个是3.6.8,现在开始尝试对python解释器进行切换测试(看下图),使用
pyenv local 2.6
命令来将当前目录的python环境切换成2.6,然后使用pyenv versions
来查看切换后的版本状态,*
已经切换到2.6上,这时使用python -V
来查看,python解释器已经成功切到2.6,再次使用pyenv local 3.6.8
命令来将当前目录的python环境切换成3.6.8,使用python -V
来查看,python解释器已经成功切到3.6.8,来回切换是成功的,证明pyenv的环境已经安装成功了Linux环境
Linux上基础python 2.7.5版本(Linux自带python,因为yum命令需要使用,Linux不像windows需要使用pip安装)
Linux操作系统:CentOS7
操作终端:shell窗口
步骤一:直接在Linux系统中安装pyenv
- yum安装依赖包
防止安装过程中出现各种异常,统一进行依赖包安装,命令如下:
yum install git zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y
- 安装pyenv包
上面yum已经安装过git,所以通过git命令去github上下载pyenv包,并且安装到root/.pyenv
目录下,也就是~/.pyenv
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
步骤二:在Linux系统中配置pyenv的环境变量(和windows环境一样是最重要的一环,pyenv能否运行全看这步骤)
此时我们把环境变量设置在~/.bash_profile
变量中,因为Linux的系统环境变量有多套文件,读取的层级也不同,pyenv的官方手册是把变量配置在~/.bashrc
中的,因为填过坑,所以我使用的是~/.bash_profile
而不是~/.bashrc
,我为什么要这么配置的原因请细读收集的另外一份文档《Linux下设置环境变量的各种方法》,2种配置方式都给出来了,自己按照实际情况进行使用,我的配置比官方多了一个$PYENV_ROOT/shims:
,细节不解释,填过坑的人都明白
官方手册的配置方式:
#vim ~/.bashrc
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
#source ~/.bashrc
我的配置方式:
#vim ~/.bash_profile
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PYENV_ROOT/shims:$PATH"
if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init -)"
fi
#vim ~/.bash_profile
环境变量配置完成后,使用$PATH
去查看下当前环境变量是否包含/root/.pyenv/bin:/root/.pyenv/shims:
,设置完成环境变量之后,测试一下pyenv的命令是否正常使用,无法使用的请检查一下~/.pyenv
目录下是否有pyenv
步骤三:测试2个python解释器通过pyenv安装是否成功,切换是否成功(测试过程和windows环境一样)
使用pyenv --version
命令来验证pyenv安装成功
pyenv --version
查看pyenv中都有哪些python解释器支持一键安装,命令:
pyenv install --list
,linux版本的pyenv淘宝镜像还没找到什么地方修改,后面找到之后会重新编辑此文档
pyenv install --list
输入python -V
,当系统只有基础python环境2.7.5
在此基础上通过pyenv安装一个python2.7.16版本与python3.7.5版本,命令如下:
pyenv install 2.7.16
pyenv install 3.7.5
整个过程与windows环境一样,所以不再贴图演示了,使用pyenv versions
命令查看已经安装的版本
与windows不同的是,这里会显示一个
system
,system
这个就表示操作系统自带的python版本,也是当前目录默认选取的版本,现在开始尝试对python解释器进行切换测试(看下图),使用pyenv local 2.7.16
命令来将当前目录的python环境切换成2.7.16,然后使用pyenv versions
来查看切换后的版本状态,*已经切换到2.7.16上,这时使用python -V
来查看,python解释器已经成功切到2.7.16,再次使用pyenv local 3.7.5
命令来将当前目录的python环境切换成3.7.5,使用python -V
来查看,python解释器已经成功切到3.7.5,来回切换是成功的,证明pyenv的环境已经安装成功了THE END
整个安装手册步骤基本上都写的很详细,新手使用注意看实际情况进行调整,遇到问题请留言或者私信
写给看到最后的你
朋友,感谢你看到了最后,技术不成熟的地方可以给予评论,一同完善,原创不宜,请勿乱喷,作者深知高手在明间