Python资料归档整理一:Pyenv部署与作用(window与Linux)

一句话解释pyenv是什么?

pyenv就是一个python的版本管理工具,注意是python版本管理工具,不是用pip安装的插件管理工具,既然pyenv能管理python的版本,那么在哪些情况下需要用到呢?

使用pyenv的场景(如果有以下使用场景,那么部署环境之前先安装pyenv)

  1. Python解释器多版本, 2.0和3.0差别巨大, 而且细分版本也不尽相同, 难以选择和管理.
  2. 不同Linux发行版自带Python不同, 如ubuntu16自带2.7和3.5版本, 其中系统许多组件依赖于自带解释器, 一旦删除或者更改都可能会造成系统出问题,执行yum命令的Linux系统都依赖python解释器,删除python解释器后yum无法正常使用.
  3. 不同的Python解释器软件包管理也是问题, 如pip和ipython等必备包组件, 而且在项目开发中如何保证不同的包环境互不干扰也是一个问题.
  4. 在一套开发环境中需要部署多个不同版本的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安装示意图

安装进行中

安装完成

CMD命令行界面确认python安装成功

运行python版本检查命令进行确认

确认安装成功

看到python -V运行后成功输出python版本号则安装成功,如果发现命令无法运行,这是因为在安装的时候没有勾选Add Python 3.7 to PATH导致没有添加环境变量,此时有2种做法:

  1. 卸载之后重新来一次
  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%在资源管理器的具体指向位置

%USERPROFILE%在资源管理器的具体指向位置

那么也很好理解了
%USERPROFILE%/.pyenv路径等同于C:\Users\【你的win用户】\ .pyenv,具体的安装路径直接抄或者自己手动改


pyenv安装完成

此时安装完成pyenv之后,你使用pip list命令来查看安装的第三方库会发现没有pyenv,不用着急,这是正常现象,pyenv不会体现在pip的安装列表中
pyenv安装完成

无需惊慌,在windows的资源管理器中输入%USERPROFILE%/.pyenv,你会找到刚刚安装好的pyenv
pyenv安装完成

步骤三:给pyenv配置运行环境变量(最重要的一环,pyenv能否运行全看这步骤)

打开windows系统环境变量设置


打开windows系统环境变量设置

在资源管理器中复制之前的安装路径:%USERPROFILE%/.pyenv/pyenv-win路径或C:\Users\【你的win用户】\ .pyenv\pyenv-win

%USERPROFILE%\.pyenv\pyenv-win
C:\Users\lifan\.pyenv\pyenv-win
  1. 变量
    把PYENV添加到系统变量。注意不是用户变量
    变量名:PYENV
    变量值:C:\Users\lifan\.pyenv\pyenv-win 这里填写你的pyenv路径

    配置环境变量

    添加环境变量

  2. 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目录下,会导致版本切换始终是失败的,)

环境测试结果:

  1. win10环境配置用户变量PATH或系统PATH最顶层切换成功
  2. win11环境配置用户变量PATH最顶层切换失败,只有配置系统PATH最顶层切换成功,这里需要格外注意,不清楚为什么win11会这样
  1. 测试是否安装成功(不成功的从1、2重来)
    重新打开CMD窗口,环境变量修改之后新的CMD窗口才会生效,所以要开一个新CMD窗口,输入命令:pyenv --version

pyenv --version

安装成功
  1. 可以查看pyenv中都有哪些python解释器支持一键安装,命令:pyenv install --list,可以看出,所有的python解释器是从python的官网下载的,如果觉得慢,可以替换成淘宝镜像源

pyenv install --list

查看pyenv中的解释器列表

查看pyenv中的解释器列表

步骤四:替换淘宝镜像源(觉得自己网快、怕出错、找不到,可以忽略该步骤)

  1. 老版本进入C:\Users\lifan\.pyenv\pyenv-win\libexec目录找到pyenv-install.vbs文件
  2. 新版本进入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

基础python3.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的环境已经安装成功了
python解释器来回切换成功

Linux环境

Linux上基础python 2.7.5版本(Linux自带python,因为yum命令需要使用,Linux不像windows需要使用pip安装)
Linux操作系统:CentOS7
操作终端:shell窗口

步骤一:直接在Linux系统中安装pyenv

  1. 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

  1. 安装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安装成功

查看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命令查看已经安装的版本

查看安装的python解释器

与windows不同的是,这里会显示一个systemsystem这个就表示操作系统自带的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

整个安装手册步骤基本上都写的很详细,新手使用注意看实际情况进行调整,遇到问题请留言或者私信

写给看到最后的你

朋友,感谢你看到了最后,技术不成熟的地方可以给予评论,一同完善,原创不宜,请勿乱喷,作者深知高手在明间

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容