首页 > 编程语言 >Python多版本管理pyenv

Python多版本管理pyenv

时间:2023-02-27 23:33:48浏览次数:57  
标签:Python pyenv 版本 2.2 安装 bash

1 背景&概述

因某些需求,需要安装TensorFlow,很自然地在终端敲下了以下命令:

pip install tensorflow
  • 1

然后。。。

在这里插入图片描述

好家伙???

居然没有??

因为是Python 3.9,去pypi搜索了,居然还真没有支持的,最高只有Python 3.8

在这里插入图片描述

于是便考虑一个多版本的Python环境,碰巧就在Github上看到了一个22.3k的东西:

在这里插入图片描述

这就是pyenv,一个简单的Python版本管理器,可以轻松地在各个Python版本之间进行切换。

好了废话不说,进入正题。

2 安装

安装有两种方式:

  • 自动安装
  • 手动安装

2.1 自动安装

curl https://pyenv.run | bash
# 或
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
  • 1
  • 2
  • 3

2.2 手动安装

手动安装大致分为三步:

  • 安装pyenv
  • 配置环境变量
  • 初始化

2.2.1 安装pyenv

笔者系统Manjaro,可以直接yay安装:

yay -S pyenv
  • 1

其他系统的可以使用apt search/yum search等看看软件包仓库有没有,有的话直接安装即可,没有的话,可以clone安装:

git clone https://github.com/pyenv/pyenv.git ~/.pyenv
  • 1

这一步是可选的)接着就是编译动态bash扩展进行加速:

cd ~/.pyenv && src/configure && make -C src
  • 1

官方解释说,不用害怕编译失败,因为仍然会正常工作。

2.2.2 配置环境变量

这一步就是把PYENV以及更新后的PATH配置成环境变量,官方文档按照shell类型进行了分类,根据自己情况选择即可。

2.2.2.1 bash

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
  • 1
  • 2

2.2.2.2 Zsh

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
  • 1
  • 2

2.2.2.3 Fish shell

set -Ux PYENV_ROOT $HOME/.pyenv
set -Ux fish_user_paths $PYENV_ROOT/bin $fish_user_paths
  • 1
  • 2

2.2.3 初始化

配置完环境变量后还要进行初始化操作,文档同样按shell类型进行了分类。

2.2.3.1 bash

echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bash_profile
  • 1

2.2.3.2 Zsh

echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.zshrc
  • 1

2.2.3.3 Fish shell

echo -e '\n\n# pyenv init\nif command -v pyenv 1>/dev/null 2>&1\n  pyenv init - | source\nend' >> ~/.config/fish/config.fish
  • 1

2.3 测试

重新开启一个终端,输入pyenv,输出如下信息就表明安装成功了:

在这里插入图片描述

3 基本使用

  • pyenv commands:查看所有pyenv命令
  • pyenv exec:使用特定Python版本执行某条命令
  • pyenv global:设置或查看全局Python版本
  • pyenv hooks:列出给出的pyenv命令的钩子脚本
  • pyenv init:配置shell环境
  • pyenv install:安装某个版本的Python
  • pyenv local:为某个应用设置特定的Python版本
  • pyenv prefix:显示对应Python版本的路径前缀
  • pyenv rehash:再哈希pyenv shims(不清楚有什么用,欢迎评论补充)
  • pyenv root:显示pyenv根目录
  • pyenv shell:为某个shell设置特定的Python版本(与pyenv local类似)
  • pyenv shims:列出当前存在的shimspyenv的工作原理就是在一个叫shims的目录下创建Python解释器的“假版本”,寻找Python应用时先从该目录查找)
  • pyenv uninstall:卸载某个版本Python
  • pyenv --version:显示pyenv版本
  • pyenv version:显示当前Python版本,等价于pyenv version-name+pyenv version-file
  • pyenv version-file/version-name/version-origin:当前Python版本对应的文件/名字/位置
  • pyenv whence:列出已安装的一个范围内的Python版本,比如列出本地安装的Python2Python3的版本,可以使用pyenv whence 2to3
  • pyenv which:列出可执行文件的绝对路径,比如pyenv which python可以列出python命令的绝对路径

4 实际应用

虽然上面说了这么多命令,但实际使用频率高的命令并不多,主要有以下几个:

  • pyenv version
  • pyenv install
  • pyenv global

一般安装的步骤如下,先使用

pyenv install -l
  • 1

查找需要安装的Python版本:

在这里插入图片描述

这里还有一大串,就不全部截图了,比如需要安装3.6.12版本:

pyenv install 3.6.12
  • 1

安装之后可以使用

pyenv versions
  • 1

查看安装的版本,这里笔者安装有两个,一个是系统自带的Python3.9,一个是pyenv安装的Python3.6

在这里插入图片描述

接着使用

pyenv global 3.6.12
  • 1

切换到新安装的版本:

在这里插入图片描述

这样就切换到了新安装的版本,如果不是全局替换而是局部替换的话可以使用pyenv local/pyenv shell

要注意的是切换版本后pip的版本也会不一样,而且两个版本使用pip安装的包也是独立的:

在这里插入图片描述

在这里插入图片描述

5 参考

标签:Python,pyenv,版本,2.2,安装,bash
From: https://www.cnblogs.com/clark1990/p/17162373.html

相关文章

  • Cephadm部署rgw ingress和nfs ingress(Pacific版本)
    rgwingress自动生成的配置keepalived的配置文件:/etc/keepalived/keepalived.conf#Thisfileisgeneratedbycephadm.vrrp_scriptcheck_backend{script"/u......
  • Python 异步: 保护任务免于取消(13)
    Asyncio任务可以通过调用它们的cancel()方法来取消。我们可以通过将任务包装在对asyncio.shield()的调用中来保护任务不被取消。让我们仔细看看。1.什么是Asyncio......
  • Python 类内、类间 函数的调用
    类内函数的调用classA(): defdouble(self,x): returnx*2 deftriple(self,y): returny*3 defsum(self,x,y): returnself.double(x)+self.triple(y)if......
  • SpringCloudAlibaba、SpringCloud、SpringBoot、Spring版本对应关系
    SpringCloudAlibaba版本说明:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明最新(SpringBoot3.0以下)示例:SpringCloudAlibabaVersionSpringCloud......
  • python / lib
    spython正则表达式:repython操作系统库:ospython爬虫库:request库C:\Users\lindows>pipinstallrequests-ihttps://mirrors.aliyun.com/pypi/simpleLookinginindex......
  • Python中logging模块用法
    一、低配logging日志总共分为以下五个级别,这个五个级别自下而上进行匹配debug-->info-->warning-->error-->critical,默认最低级别为warning级别。1.v1importlogging......
  • python爬虫-request模块
    1.requests中的请求方法  HTTP请求方法:requests.get(url,params=None,**kwargs)#GET请求requests.post(url,data=None,json=None,**kwa......
  • 如何选择Python与C++之间的胶水:Boost.Python,Cython,pybind11,SWIG
    Python作为一门胶水语言,它与C/C++之间的兼容性(Interoperability)我认为是它相比其他动态语言脱颖而出的最大原因。Python原生支持的是与C语言的接口,Python的发行版自带有Pyt......
  • ChatGPT: python3 查找在列表1中而不再列表2的项目
    A:f1_urls=['a','b']f2_urls=['a','c']python3中获取存在于f1_urls而不在f2_urls的项目Q:f1_urls=['a','b']f2_urls=['a','c']#将列表转换为集......
  • python用turtle画出给定图片的图像
    python用turtle画出给定图片的图像、校徽等复杂图像都可以需要:1.要画的图片2.安装好cv和turtle打开python文件,把想画的图片放到和py文件同目录,代码中默认图片名字为1.xxxxx......