Python使用pyenv实现多环境管理


Posted in Python onFebruary 05, 2021

1 背景&概述

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

pip install tensorflow

然后。。。

Python使用pyenv实现多环境管理

好家伙???

居然没有??

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

Python使用pyenv实现多环境管理

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

Python使用pyenv实现多环境管理

这就是 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 ,输出如下信息就表明安装成功了:

Python使用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:列出当前存在的shims(pyenv的工作原理就是在一个叫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版本,比如列出本地安装的Python2到Python3的版本,可以使用pyenv whence 2to3
  • pyenv which:列出可执行文件的绝对路径,比如pyenv which python可以列出python命令的绝对路径

4 实际应用

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

  • pyenv version
  • pyenv install
  • pyenv global

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

pyenv install -l

查找需要安装的 Python 版本:

Python使用pyenv实现多环境管理

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

pyenv install 3.6.12

安装之后可以使用

pyenv versions

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

Python使用pyenv实现多环境管理

接着使用

pyenv global 3.6.12

切换到新安装的版本:

Python使用pyenv实现多环境管理

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

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

Python使用pyenv实现多环境管理

Python使用pyenv实现多环境管理

5 参考

1、 Github-pyenv

2、 Github-pyenv-installer

3、 知乎-Python环境Memo

到此这篇关于Python使用pyenv实现多环境管理的文章就介绍到这了,更多相关Python pyenv多环境管理内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python协程用法实例分析
Jun 04 Python
Python使用sorted排序的方法小结
Jul 28 Python
Python使用asyncio包处理并发详解
Sep 09 Python
pygame实现俄罗斯方块游戏
Jun 26 Python
Python实现压缩文件夹与解压缩zip文件的方法
Sep 01 Python
python爬取盘搜的有效链接实现代码
Jul 20 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
Jul 22 Python
python笔记_将循环内容在一行输出的方法
Aug 08 Python
解决django FileFIELD的编码问题
Mar 30 Python
Python按照list dict key进行排序过程解析
Apr 04 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
Jun 08 Python
Python CategoricalDtype自定义排序实现原理解析
Sep 11 Python
python中的unittest框架实例详解
Feb 05 #Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
Feb 04 #Python
用60行代码实现Python自动抢微信红包
Feb 04 #Python
Python+Appium实现自动化清理微信僵尸好友的方法
Feb 04 #Python
python中操作文件的模块的方法总结
Feb 04 #Python
Python3利用openpyxl读写Excel文件的方法实例
Feb 03 #Python
python之openpyxl模块的安装和基本用法(excel管理)
Feb 03 #Python
You might like
ionCube 一款类似zend的PHP加密/解密工具
2010/07/25 PHP
php上传文件问题汇总
2015/01/30 PHP
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
javascript中节点的最近的相关节点访问方法
2013/03/20 Javascript
JS实现灵巧的下拉导航效果代码
2015/08/25 Javascript
九种原生js动画效果
2015/11/11 Javascript
javascript实现的猜数小游戏完整实例代码
2016/05/10 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
浅析使用BootStrap TreeView插件实现灵活配置快递模板
2016/11/28 Javascript
详解前端自动化工具gulp自动添加版本号
2016/12/20 Javascript
详解Vue.js之视图和数据的双向绑定(v-model)
2017/06/23 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
socket io与vue-cli的结合使用的示例代码
2018/11/01 Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
2019/06/09 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
JavaScript array常用方法代码实例详解
2020/09/02 Javascript
Ant Design moment对象和字符串之间的相互转化教程
2020/10/27 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
[55:02]2014 DOTA2国际邀请赛中国区预选赛 HGT VS Orenda
2014/05/21 DOTA
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
python通过urllib2爬网页上种子下载示例
2014/02/24 Python
python生成指定尺寸缩略图的示例
2014/05/07 Python
python select.select模块通信全过程解析
2017/09/20 Python
使用python实现快速搭建简易的FTP服务器
2018/09/12 Python
基于python调用psutil模块过程解析
2019/12/20 Python
python实现mean-shift聚类算法
2020/06/10 Python
python基于opencv实现人脸识别
2021/01/04 Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
2021/02/01 Python
仿CSDN Blog返回页面顶部功能实现原理及代码
2013/06/30 HTML / CSS
介绍一下linux文件系统分配策略
2013/02/25 面试题
毕业生教师求职信
2013/10/20 职场文书
部队万能检讨书
2014/02/20 职场文书
法制宣传实施方案
2014/03/13 职场文书
2016银行招聘自荐信
2016/01/28 职场文书
Python快速实现一键抠图功能的全过程
2021/06/29 Python