Python使用pyenv实现多环境管理

作者:氷泠 时间:2022-10-23 00:18:23 

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

来源:https://segmentfault.com/a/1190000039173896

标签:Python,pyenv,多环境管理
0
投稿

猜你喜欢

  • 用 AjaxTags 简化 Ajax 开发

    2007-11-27 00:00:00
  • 通过视图修改数据时所应掌握的基本准则

    2009-01-07 14:22:00
  • django实现web接口 python3模拟Post请求方式

    2023-07-28 15:18:14
  • 将Django框架和遗留的Web应用集成的方法

    2023-04-11 11:18:52
  • 详解Python用三种方式统计词频的方法

    2021-02-10 13:30:12
  • Python BS4库的安装与使用详解

    2021-06-30 02:00:22
  • 用自定义html标签让IE支持html5新增元素

    2011-03-17 16:10:00
  • Python中logging日志的四个等级和使用

    2023-05-10 14:57:41
  • Python数据类型--字典dictionary

    2023-06-19 12:49:53
  • python模拟登录百度贴吧(百度贴吧登录)实例

    2023-11-20 14:30:56
  • Laravel中间件的使用详解

    2023-05-27 10:16:40
  • 跟老齐学Python之编写类之一创建实例

    2021-05-06 21:16:56
  • sqlserver 数据库学习笔记

    2011-12-01 08:15:06
  • Python 页面解析Beautiful Soup库的使用方法

    2022-02-26 07:57:15
  • python使用cartopy库绘制台风路径代码

    2023-08-22 15:50:18
  • Python批量查询关键词微信指数实例方法

    2022-06-28 14:54:20
  • 如何爬取通过ajax加载数据的网站

    2022-05-03 15:06:01
  • 浅谈numpy中np.array()与np.asarray的区别以及.tolist

    2022-06-06 12:32:10
  • keras中的loss、optimizer、metrics用法

    2022-06-15 15:53:07
  • javascript的闭包介绍(司徒正美)

    2024-06-05 09:12:21
  • asp之家 网络编程 m.aspxhome.com