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
:安装某个版本的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
版本:
这里还有一大串,就不全部截图了,比如需要安装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,互不兼容. 有些项目可能用 ...
随机推荐
- Gradle 差异化构建
Compile 默认的依赖方式,任何情况下都会依赖. Provided 只提供编译时依赖,打包时不会添加进去. Apk 只在打包Apk包时依赖,这个应该是比较少用到的. TestCompile 只在测 ...
- 后端程序员之路 25、Redis Cluster
官方教程和功能介绍: REDIS cluster-tutorial -- Redis中文资料站 -- Redis中国用户组(CRUG)http://www.redis.cn/topics/cluste ...
- 03.从0实现一个JVM语言系列之语法分析器-Parser-03月01日更新
从0实现JVM语言之语法分析器-Parser 相较于之前有较大更新, 老朋友们可以复盘或者针对bug留言, 我会看到之后答复您! 源码github仓库, 如果这个系列文章对你有帮助, 希望获得你的一个 ...
- macOS启动Kafka
目录 kafka目录结构 先启动zookeeper 后启动kafka 创建topic 创建一个生产者 创建一个消费者 kafka目录结构 # kafka安装目录 /usr/local/Cellar/k ...
- 详解JavaScript中的原型
前言 原型.原型链应该是被大多数前端er说烂的词,但是应该还有很多人不能完整的解释这两个内容,当然也包括我自己. 最早一篇原型链文章写于2019年07月,那个时候也是费了老大劲才理解到了七八成,到现在 ...
- RFC2544吞吐量测试详细步骤-MiniSMB-HurricaneII软件操作演示
RFC2544吞吐量测试详细步骤-MiniSMB-HurricaneII软件操作演示 关键词:网络性能测试:RFC2544:吞吐量:吞吐率. RFC2544协议是RFC组织提出的用于评测网络互联设备( ...
- 『笔记』2-SAT
前置 \(SAT\) 是适定性( \(Satisfiability\) )问题的简称.一般形式为 \(k \ -\) 适定性问题,简称 \(k-SAT\) .而当 \(k>2\) 时该问题为 \ ...
- Percona XtraDB Cluster之流量控制
什么是流量控制? Percona XtraDB Cluster具有一种称为流控制的自调节机制.该机制有助于避免集群中最弱/最慢的成员明显落后于集群中其他成员的情况. 当集群成员在写数据很慢(同时又继续 ...
- Azure AD, Endpoint Manger(Intune), SharePoint access token 的获取
本章全是干货,干货,干货,重要的事情说三遍. 最近在研究Azure, Cloud相关的东西,项目中用的是Graph API(这个在下一章会相信介绍),可能是Graph API推出的时间比较晚,部分AP ...
- 多租缓存实现方案 (Java)
多租缓存实现方案 (Java) 缓存在系统中是不可少的,缓存的实现是一个从无到有的过程,最开始,单应用的,缓存都是应用内部的,Map基本就能满足,实现简单.但是当上了微服务之后,应用是多部署的,应用之 ...