当前位置: 首页 > 科技观察

说说如何随意切换Python版本

时间:2023-03-21 17:20:02 科技观察

前言不知道大家在日常开发工作中有没有遇到过这样的情况:项目A是用Python2.7开发的(可能因为历史问题没有更新)项目B使用Python3.10.4版本开发,假设使用requests==2.25.1版本。C项目使用Python3.10.4版本开发,假设使用requests==2.27.1版本。第一个问题:Python版本问题是Python2.x和Python3.x的区别比较大,版本太多很难管理。其次,第二个问题:也许requests的版本在项目B和项目C中不会有任何影响。但是在其他项目中使用同一个包的不同版本会产生巨大的影响。那么这个时候就需要区分版本了。那么同一个Python版本需要使用两个版本的包。显然,在这种情况下,包管理是一个问题。在日常的项目开发过程中,保证不同的包环境互不干扰是非常重要的。这是必要的,也是基本的需要。那么最好的办法就是两个虚拟环境。那么有没有终极解释器,既可以管理不同的版本,又可以提供控制不同包版本的功能呢?当然有,就是pyenv。1.什么是pyenv?pyenv是从ruby社区fork出来的一个Python环境管理工具,可以方便地切换全局Python解释器版本,并且可以结合virtualenv方便的管理包。安装pyenv后,它会在你的$PATH中添加环境变量,如下:?echo$PATH/Users/allenjol/.pyenv/plugins/pyenv-virtualenv/shims:/Users/allenjol/.pyenv/shims:/usr/local/bin:/usr/local/sbin那么,pyenv实际上是控制你的PATH环境变量来切换Python版本的。它通过在PATH路径的开头插入垫片路径来实现Python的版本控制。2、pyenv、virtualenv、pipenv的关系和区别前面说了pyenv控制了Python版本,virtualenv是一个比较成熟的Python虚拟环境管理工具,而pipenv是由requrests包的作者KennethReitz编写的,用于用作Python。还可以生成虚拟环境的包管理工具。本文暂时不讨论这个工具,会在以后的文章中介绍。pyenv专注于Python解释器版本的管理。您可以随意切换您的Python版本,而无需指定特定的虚拟环境目录。3、虚拟环境下安装pyenvgitclonepyenvCentOS7https://img.ydisp.cn/news/20220902/5rw1tpw2zww~/.pyenvMacOS下安装pyenvbrewupdatebrewinstallpyenvMacOS下由于网络原因无法正常使用brew,有两种解决方案:替换源参考https://sre.ayunw.cn/posts/terminal_configure_proxy_with_clash/本文用于设置代理设置和设置环境变量#bash下设置环境变量echo'exportPYENV_ROOT="$HOME/.pyenv"'>>~/.bashrcecho'command-vpyenv>/dev/null||exportPATH="$PYENV_ROOT/bin:$PATH"'>>~/.bashrcecho'eval"$(pyenvinit-)"'>>~/.bashrcsource~/.bashrc#设置zsh下的环境变量(我是iterm2+zsh)echo'exportPYENV_ROOT="$HOME/.pyenv"'>>~/.zshrcecho'command-vpyenv>/dev/null||exportPATH="$PYENV_ROOT/bin:$PATH"'>>~/.zshrcecho'eval"$(pyenvinit-)"'>>~/.zshrcsource~/.zshrc查看pyenv版本pyenv--version4,命令行使用方法#查看当前版本pyenvversion#查看所有版本pyenvversions#查看有哪些版本可以安装pyenvinstall--list#安装python3.10.4版本pyenvinstall3.10.4#安装一个版本后重新hash,让pyenv知道托管的Python版本信息pyenvrehash#卸载pyenvuninstall3.10.4#查看所有版本?pyenvversionssystem*3.10.4(setby/Users/allenjol/.pyenv/version)#切换全局Python版本,即切换到系统Python版本pyenvglobalsystem#即切换到3.10.4版本的pyenvpyenvglobal3.10.4五、包管理插件pyenv-virtualenv安装pyenv-virtualenvlinux安装gitclonehttps://img.ydisp.cn/news/20220902/4opfvczr1sf~/.pyenv/plugins/pyenv-virtualenv#配置环境variableecho'eval"$(pyenvvirtualenv-init-)"'>>~/.bash_profilesource~/.bash_profilemacOS下安装gitclonehttps://img.ydisp.cn/news/20220902/3hxhaincjgo$(pyenvroot)/plugins/pyenv-virtualenv#zshecho'eval"$(pyenvvirtualenv-init-)"'forMacOS>>~/.zshrcexec"$SHELL"#方法2brewinstallpyenv-virtualenvecho'eval"$(pyenvvirtualenv-init-)"'>>~/.zshrcexec"$SHELL"usingpyenv-virtualenv#创建venv环境pyenvvirtualenvvenv3.10.4#激活venvpyenvactivatevenv3.10.4pyenvversion#退出venvenvironmentpyenvdeactivatevenv3.10.4#删除虚拟环境pyenvuninstallvenv3.10.4当你切换Python虚拟环境时,你的pip和你虚拟环境中的包都切换到你的目标环境中,与原环境无关。所以这样它就得到了很好的python解释器环境和包版本隔离。