Python使用pyenv实现多环境管理
作者:氷泠 发布时间:2022-10-23 00:18:23
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 参考
1、 Github-pyenv
2、 Github-pyenv-installer
3、 知乎-Python环境Memo
来源:https://segmentfault.com/a/1190000039173896


猜你喜欢
- panic源码解读前言本文是在go version go1.13.15 darwin/amd64上进行的panic的作用panic能够改变程
- execute、executeUpdate、executeQuery三者的区别(及返回值)一、boolean execute(String
- javascript中要判断一个变量是否为array通常是比较困难的,因为var a = [];alert(t
- 因为旧电脑不幸挂了,所以要在新电脑上面重新安装Python。一看官网发现已经更新到3.8.5+了,乖乖,真是迭代快啊。虽然之前安装过一次,不
- 内部/内嵌函数1、定义:在一个函数的函数体内使用关键字def关键字定义一个新的函数,这个新的函数就叫做内部/内嵌函数。2、注意点:内部函数的
- 定义直接赋值:就是对象的引用(别名)浅拷贝(copy):拷贝父对象,不拷贝对象内部的子对象深拷贝(deepcopy):copy模块的deep
- 在Python所有的数据结构中,list具有重要地位,并且非常的方便,这篇文章主要是讲解list列表的高级应用,基础知识可以查看博客。 此文
- 什么是recovery?在elasticsearch中,recovery指的是一个索引的分片分配到另外一个节点的过程,一般在快照恢复、索引复
- 前言Python真的是无所不能,原因就是因为Python有数目庞大的库,无数的现成的轮子,让你做很多很多应用都非常方便。wifi跟我们的生活
- 本文实例为大家分享了python实现记事本功能的具体代码,供大家参考,具体内容如下1. 案例介绍tkinter 是 Python下面向 tk
- 生成HTML方法主要步骤只有两个:一、获取要生成的html文件的内容二、将获取的html文件内容保存为html文件我在这里主要说明的只是第一
- 如果您目前拥有一个冷备份,但是缺少了其中的一个数据文件,但你目前存在所有的归档,如果您要恢复数据文件,可以参考以下的示例:[oracle@j
- 使用jQuery的.post提交,并期望得到多个数据,Python后台要使用json格式。不指定datatype为json,让jquery自
- 这篇文章主要介绍了python已协程方式处理任务实现过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 一、概述全文索引在表中包括一个或多个基于字符的列。这些列可以具有以下任何数据类型:char、varchar、nchar、nvarchar、t
- 下面就来介绍下SQL Server 2008中使用的端口有哪些:首先,最常用最常见的就是1433端口。这个是数据库引擎的端口,如果我们要远程
- Go 命令Go语言自带有一套完整的命令操作工具,你可以通过在命令行中执行go来查看它们:图1.3 Go命令显示详细的信息这些命令对于我们平时
- 概述binlog2sql是一个Python开发开源的MySQL Binlog解析工具,能够将Binlog解析为原始的SQL,也支持将Binl
- 基本操作图片的基本读取与保存。读取图片读取和文件读取类似,需要先获取流:注册图片的解码器(如:jpg则import _ "imag
- DEMO:var testobj = document.getElementById("test&q