Python多环境管理——pyenv
1 背景&概述
因某些需求,需要安装TensorFlow,很自然地在终端敲下了以下命令:
pip install tensorflow
然后。。。

好家伙???
居然没有??
因为是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
2.2 手动安装
手动安装大致分为三步:
- 安装
pyenv - 配置环境变量
- 初始化
2.2.1 安装pyenv
笔者系统Manjaro,可以直接yay安装:
yay -S pyenv
其他系统的可以使用apt search/yum search等看看软件包仓库有没有,有的话直接安装即可,没有的话,可以clone安装:
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
(这一步是可选的)接着就是编译动态bash扩展进行加速:
cd ~/.pyenv && src/configure && make -C src
官方解释说,不用害怕编译失败,因为仍然会正常工作。
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
2.2.2.2 Zsh
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
2.2.2.3 Fish shell
set -Ux PYENV_ROOT $HOME/.pyenv
set -Ux fish_user_paths $PYENV_ROOT/bin $fish_user_paths
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
2.2.3.2 Zsh
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.zshrc
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
2.3 测试
重新开启一个终端,输入pyenv,输出如下信息就表明安装成功了:

3 基本使用
pyenv commands:查看所有pyenv命令pyenv exec:使用特定Python版本执行某条命令pyenv global:设置或查看全局Python版本pyenv hooks:列出给出的pyenv命令的钩子脚本pyenv init:配置shell环境pyenv install:安装某个版本的Pythonpyenv local:为某个应用设置特定的Python版本pyenv prefix:显示对应Python版本的路径前缀pyenv rehash:再哈希pyenv shims(不清楚有什么用,欢迎评论补充)pyenv root:显示pyenv根目录pyenv shell:为某个shell设置特定的Python版本(与pyenv local类似)pyenv shims:列出当前存在的shims(pyenv的工作原理就是在一个叫shims的目录下创建Python解释器的“假版本”,寻找Python应用时先从该目录查找)pyenv uninstall:卸载某个版本Pythonpyenv --version:显示pyenv版本pyenv version:显示当前Python版本,等价于pyenv version-name+pyenv version-filepyenv version-file/version-name/version-origin:当前Python版本对应的文件/名字/位置pyenv whence:列出已安装的一个范围内的Python版本,比如列出本地安装的Python2到Python3的版本,可以使用pyenv whence 2to3pyenv which:列出可执行文件的绝对路径,比如pyenv which python可以列出python命令的绝对路径
4 实际应用
虽然上面说了这么多命令,但实际使用频率高的命令并不多,主要有以下几个:
pyenv versionpyenv installpyenv global
一般安装的步骤如下,先使用
pyenv install -l
查找需要安装的Python版本:

这里还有一大串,就不全部截图了,比如需要安装3.6.12版本:
pyenv install 3.6.12
安装之后可以使用
pyenv versions
查看安装的版本,这里笔者安装有两个,一个是系统自带的Python3.9,一个是pyenv安装的Python3.6:

接着使用
pyenv global 3.6.12
切换到新安装的版本:

这样就切换到了新安装的版本,如果不是全局替换而是局部替换的话可以使用pyenv local/pyenv shell。
要注意的是切换版本后pip的版本也会不一样,而且两个版本使用pip安装的包也是独立的:


5 参考
Python多环境管理——pyenv的更多相关文章
- Python多环境管理神器(pyenv)
前面我们已经介绍了,python中两种最基础的虚拟环境管理工具,venv和virtualenv,其中virtualenv可以和virtualenvwrapper配合使用.详情请参考:https://w ...
- 优雅的使用python之环境管理
优雅的使用python之环境管理 缘起 情景1:不同python版本的管理 同一电脑上的多个python版本之前的管理,为了突出问题的普遍存在,下面是有人在segmentfault上提的问题. 摘自: ...
- Python开发环境-Pyenv安装使用
安装使用-Pyenv 简单的python版本管理:pyenv 管理python解释器 管理python版本 管理python的虚拟环境 官网:https://github.com/pyenv/pyen ...
- 腾讯云服务器ubuntu16.04系统下安装Python版本管理工具pyenv
一. 系统环境 腾讯云提供的系统是ubuntu 16.04 LTS,系统默认的Python版本是2.7.12,我想要安装3.6和其他的版本. 比较方便的是腾讯云已经默认安装好了git和curl ...
- python系列-3 pyenv的使用
安装: git clone https://github.com/yyuu/pyenv.git ~/.pyenv echo 'export PYENV_ROOT="$HOME/.pyenv& ...
- CentOS7下python工作环境管理
一.pyenv管理不同的python版本1.下载安装git clone git://github.com/yyuu/pyenv.git ~/.pyenv echo 'export PYENV_ROO ...
- Linux——Django 开发环境部署(二)python版本控制器pyenv
python版本控制器pyenv 之前的 那篇是说明了django环境的site package完全独立出来了,但是使用的python解释器还是系统的,为了继续独立出来,甚至是达到ruby的rvm的自 ...
- linux centos7 安装虚拟Python环境,pyenv安装文档
python多版本控制pyenv安装文档 1.在线安装: curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-i ...
- python多环境管理一(venv与virtualenv)
一.背景 我们经常会遇见这样的场景: 1.各个项目使用的python版本不相同 由于Python的解释器版本众多,各版本之间差异非常大.特别是python2和python3,互不兼容. 有些项目可能用 ...
随机推荐
- 阿里云linux安装nginx,亲测有效
系统平台:CentOS release 6.6 (Final) 64位. 一.安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c++ libtoo ...
- sun公司和apache使用ftpclient的区别
最近因为使用FTP实现上传下载,因为已经有前辈使用了,照着敲了一遍(绝对没有复制粘贴啊,发誓).但是今天突然发现FTPClient还不一样,仔细看了看,一个是sun.net.ftp.FtpClient ...
- Django简单的使用及一些基础方法
目录 一.静态文件配置 1. 什么是静态文件 2. 静态文件的用法 3. 静态文件的动态绑定 二.请求方式与相应 1. get请求 2. post请求 3. Django后端视图函数处理请求 三.re ...
- CSS 书写禅机
这是未来的趋势所向,如是我行. 注意:原文发表于 2017-9-6,随着框架不断演进,部分内容可能已不适用. CSS 日渐惹人憎恶. 究其原因颇多,归根结底,皆因 CSS 给人的感觉总是飘渺迷蒙.变幻 ...
- 后端程序员之路 20、python复习
Welcome to Python.orghttps://www.python.org/ 怎么用最短时间高效而踏实地学习 Python? - 知乎https://www.zhihu.com/quest ...
- 机械硬盘换固态硬盘&重装系统
起初 笔记本电脑购买于2016年底,i7四代处理器,940M显卡,4G内存,500G固态硬盘,这样的配置已经跟不上使用需求了.于是先把内存条升级成了单根8G金士顿内存条,豁然发现使用chrome浏览器 ...
- CSS:CSS基础
和 HTML 类似,CSS 也不是真正的编程语言,甚至不是标记语言.它是一门样式表语言,这也就是说人们可以用它来选择性地为 HTML 元素添加样式. CSS规则集 选择器(Selector):元素的名 ...
- 一文讲通.NET Core部署到Windows IIS最全解决方案
回顾之前的ASP.NET的经典托管 在经典ASP.NET应用程序中,所有一切都托管在IIS工作进程中(w3wp.exe),这也被称为IIS应用程序池.ASP.NET程序被托管在应用程序池中,并且被按照 ...
- MySQL之九---分布式架构(Mycat/DBLE)
MyCAT基础架构图 双主双从结构 MyCAT基础架构准备 准备环境 环境准备: 两台虚拟机 db01 db02 每台创建四个mysql实例:3307 3308 3309 3310 删除历史环境 p ...
- IDEA修改jar包中class文件后重新生成jar包
一.背景 最新想要修改rebeyond大佬的冰蝎项目,特地去网上搜索如何修改jar包中的源码再替换回去的方法,但由于现在的一些文章写的太烂,导致走了很多弯路,因此写下这篇快速使用IDEA修改源码并替换 ...