前言
Python 的不同版本之间常常存在依赖关系和兼容性问题
,为了方便开发人员在 不同项目中使用不同的版本 。
如果大家使用过Python版本管理工具,肯定大多数人使用的都是Anaconda
,它是一个优秀的数据科学开发环境,本身也提供了丰富的Python工具集合和常用的科学计算与数据分析库。但Anaconda体积比较庞大,也携带有图形化界面,它不算一个轻量级的Python版本管理工具。
所以 pyenv
这一简单而强大的 Python 版本管理工具应运而生。这个工具小编已经用了两年多了,感觉使用体验上都还不错,故本文将介绍 pyenv 的基本概念、安装方法以及使用和注意事项,帮助开发者更好地管理 Python 版本。
一、pyenv 简介
pyenv
是一款轻量级的 Python 版本管理工具,可以在同一台机器上同时安装多个 Python 版本,并且可以根据应用程序或项目的需求进行快速切换。它的主要功能包括版本的安装、卸载、切换和全局默认版本的设置。
提示:pyenv不大适合Windows系统使用,但也可以安装使用;主要适用于MacOS、Linux等unix系统
pyenv
是一个forked自ruby社区的简单、低调、遵循UNIX哲学的Python环境管理工具, 它可以轻松切换全局解释器版本, 同时结合vitualenv插件方便的管理对应的包源。
pyenv和主流的pipenv、virtualenv的关系
pipenv
是 requests 作者 Kenneth Reitz大神写的一个python虚拟环境管理工具, 结合了pip和virtualenv的功能, 侧重点还是在包环境管理上, 使用思路是先创建一个指定python版本的环境, 然后在此环境上安装相应的包, 好评不错, 看到很多大牛都在推荐。
virtualenv
是一个比较传统成熟的虚拟环境管理工具了, 用的人也比较多, 思路也是创建虚拟环境, 然后安装相应的包, 要进入环境就source一下activate脚本激活一下, 尽管成熟, 但也经常由于各种原因在项目部署时老是容易出现一些环境问题。
二、pyenv 安装
pyenv 的主流安装方式有两种,一是按照官方提供的方法下载安装,二是通过行业大佬们写好的一键安装脚本安装。
1、官方Git方式安装
对于MacOS用户,可以使用Homebrew
来直接安装pyenv:
brew update
brew install pyenv
当然也可以使用第一种 git
下载pyenv
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
除此之前还需要下载pyenv虚拟环境包管理工具pyenv-virtualenv
:
$ git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
然后我们在Mac或Linux系统shell环境变量配置文件中配置,配置如下(.zshrc/.bashrc):
代码语言:javascript复制export PYENV_ROOR="$HOME/.pyenv"
export PATH=$PYENV_ROOT/shims:$PATH
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
最后,在配置文件前执行source
命令, 使其生效。
输入pyenv --version
测试一下,出现如下画面即为安装成功!
2、三方一键安装
可以使用大佬们封装好的一键安装脚本进行安装:
代码语言:javascript复制curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
安装过程可能会有提示,根据提示安装即可。
3、pyenv 卸载
pyenv 卸载方式很简单,直接删除pyenv目录即可。
代码语言:javascript复制rm -rf ~/.pyenv
同时需要将配置文件(.zshrc或.bashrc)中pyenv相关的删除掉:
代码语言:javascript复制export PATH="~/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
三、pyenv 环境管理
1、解释器版本安装与切换
查询当前可安装的版本:
代码语言:javascript复制pyenv install --list
输出:
安装指定版本(安装完成后需要pyenv rehash):
代码语言:javascript复制 pyenv install 3.8.12
不过我不喜欢这种安装方式,每次切换还需要输入版本号,很麻烦,而且谁没事记版本号,后面项目多了,环境多了,同版本又怎么区分。这时候就用到我们pyenv的虚拟环境包管理进行安装,他就多了一个虚拟环境名称,跟Anaconda一样。
代码语言:javascript复制pyenv virtualenv 3.10.7 chatgpt_env
查询已安装的Python版本:
代码语言:javascript复制 pyenv versions
输出:
指定全局版本,当然也可以指定多个全局版本,前面的优先
代码语言:javascript复制 pyenv global normal_work
pyenv global normal_work chatgpt_env
指定shell版本,意思是在哪个目录下执行设置的版本,下次进入该目录会自动切换到该Python版本,多项目操作时,不要再手动切换了
代码语言:javascript复制pyenv shell normal_work
删除指定版本
代码语言:javascript复制 pyenv uninstall normal_work
只查看已安装的虚拟环境列表
代码语言:javascript复制 pyenv virtualenvs
激活虚拟环境
代码语言:javascript复制pyenv activate normal_work
退出虚拟环境
代码语言:javascript复制pyenv deactivate
四、pyenv安装Anaconda
pyenv其实内部集成了Anaconda的软件包,在上面可安装列表中也可以看到有anaconda的版本可供下载安装。而且还有很多的版本,miniconda的也有。
使用pyenv创建anaconda的虚拟环境
代码语言:javascript复制pyenv virtualenv miniconda-3.0.5 conda_demo_env
我们进入conda的虚拟环境
代码语言:javascript复制pyenv activate conda_demo_env
之后可以直接使用conda命令来管理该环境
代码语言:javascript复制conda install xxx
五、总结
1、pyenv极大程度的利用了环境变量工具,通过在环境变量前面插入新路径来实现python解释器版本管理和虚拟环境管理。
2、pyenv相比其他工具,更加侧重在 python 解释器版本管理上, 比包管理更大一个层级, 使用pyenv我们可以方便的下载指定版本的python解释器, pypi, anaconda等, 可以随时自由的在shell环境中本地、全局切换python解释器。
3、开发的时候不需要限定某个版本的虚拟环境, 只需要在部署的时候用pyenv local指定当前项目目录使用某个版本就好了,很方便。
4、pyenv也可以创建好指定的虚拟环境, 但不需要指定具体目录, 自由度更高, 使用也简单。
注意:pyenv 不支持 Windows 系统。Windows 上有一个 pyenv 的替代品,是 pyenv-win 。它用来在多个安装的 Python 版本之间进行切换。