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中使用pngquant压缩png图片的教程
Apr 09 Python
Python实现将DOC文档转换为PDF的方法
Jul 25 Python
Python 文件处理注意事项总结
Apr 10 Python
Python编程之序列操作实例详解
Jul 22 Python
Python字符串拼接的几种方法整理
Aug 02 Python
python实现手机通讯录搜索功能
Feb 22 Python
python 通过 socket 发送文件的实例代码
Aug 14 Python
python解析json串与正则匹配对比方法
Dec 20 Python
Python处理时间日期坐标轴过程详解
Jun 25 Python
python使用socket实现的传输demo示例【基于TCP协议】
Sep 24 Python
Python unittest discover批量执行代码实例
Sep 08 Python
Python列表删除重复元素与图像相似度判断及删除实例代码
May 07 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
require(),include(),require_once()和include_once()区别
2008/03/27 PHP
php 取得瑞年与平年的天数的代码
2009/08/10 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
2012/08/01 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
2017/10/19 PHP
为何说PHP引用是个坑,要慎用
2018/04/02 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
2019/12/02 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
2020/04/14 PHP
javascript web对话框与弹出窗口
2009/02/22 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
Flexigrid在IE下不显示数据的有效处理方法
2014/09/04 Javascript
PHP守护进程实例
2015/03/06 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
2015/12/02 Javascript
JavaScript数组的一些奇葩行为
2016/01/25 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
2018/03/16 Javascript
vue项目环境变量配置的实现方法
2018/10/12 Javascript
vue axios请求频繁时取消上一次请求的方法
2018/11/10 Javascript
vue插槽slot的理解和使用方法
2019/04/03 Javascript
[04:32]DOTA2著名解说配音敌法师 现场专访海涛怒切假腿
2013/12/20 DOTA
python实现批量获取指定文件夹下的所有文件的厂商信息
2014/09/28 Python
python中安装Scrapy模块依赖包汇总
2017/07/02 Python
python 列表删除所有指定元素的方法
2018/04/19 Python
浅谈python新式类和旧式类区别
2019/04/26 Python
记录Python脚本的运行日志的方法
2019/06/05 Python
对Pytorch神经网络初始化kaiming分布详解
2019/08/18 Python
django的模型类管理器——数据库操作的封装详解
2020/04/01 Python
美国在线宠物用品商店:Entirely Pets
2017/01/01 全球购物
Jones Bootmaker官网:优质靴子和鞋子在线
2020/11/30 全球购物
好的自荐信包括什么内容
2013/11/07 职场文书
自我评价个人范文
2013/12/16 职场文书
中秋晚会策划方案
2014/06/12 职场文书
研究生导师推荐信
2014/09/06 职场文书
Nginx + consul + upsync 完成动态负载均衡的方法详解
2021/03/31 Servers
原型和原型链 prototype和proto的区别详情
2021/11/02 Javascript