Mac managing Multiple Python Versions With pyenv 【 mac pyenv 管理多个python 版本 】

文章目录

    • 1. 简介
    • 2. 安装
      • 2.1 brew 安装 pyenv
      • 2.2 脚本安装
    • 3. pyenv 安装 Python
    • 4. 卸载 python
    • 5. 管理 python

1. 简介

Pyenv 是一个用于管理和切换多个 Python 版本的工具。它允许开发人员在同一台计算机上同时安装和使用多个不同的 Python 版本,而无需对系统进行全局更改。Pyenv 提供了一种简单的方法来切换 Python 版本,并且对于开发不同项目或在不同环境中使用不同的 Python 版本非常有用。

以下是 Pyenv 的一些主要特点和功能:

  • Python 版本管理:Pyenv 允许您方便地安装和管理多个 Python 版本。您可以选择安装官方的 Python 版本,也可以使用其他第三方实现的 Python 版本,如 PyPy。

  • 版本切换:通过 Pyenv,您可以轻松地在不同的 Python 版本之间进行切换。这对于测试和验证代码在不同 Python 版本下的运行行为非常有用。

  • 虚拟环境支持:Pyenv 可以与 Python 的虚拟环境管理工具(如 virtualenv 和 pyvenv)结合使用,为每个 Python 版本创建独立的虚拟环境。这使得在不同的项目中使用不同的 Python 版本和依赖项变得更加方便。

  • 插件系统:Pyenv 提供了一个插件系统,允许用户扩展其功能。例如,有一些插件可用于方便地安装特定的 Python 版本或提供其他附加功能。

  • 简单易用:Pyenv 的命令行界面非常简单和直观,使得安装、管理和切换 Python 版本变得容易上手

2. 安装

2.1 brew 安装 pyenv

# 更新 brew 保证下载到新版本的 pyenv
$ brew update# 安装依赖
$ brew install openssl readline sqlite3 xz zlib# 安装
$ brew install pyenv
# 卸载
$ brew uninstall pyenv

2.2 脚本安装

安装依赖

$ brew install openssl readline sqlite3 xz zlib

安装构建依赖项后,您就可以安装pyenv本身了。我建议使用 pyenv-installer 项目:

curl https://pyenv.run | bash

输出:

 curl https://pyenv.run | bash% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed
100   270  100   270    0     0     70      0  0:00:03  0:00:03 --:--:--    70
Cloning into '/Users/zongxun/.pyenv'...
remote: Enumerating objects: 1185, done.
remote: Counting objects: 100% (1185/1185), done.
remote: Compressing objects: 100% (675/675), done.
remote: Total 1185 (delta 692), reused 657 (delta 377), pack-reused 0
Receiving objects: 100% (1185/1185), 589.16 KiB | 479.00 KiB/s, done.
Resolving deltas: 100% (692/692), done.
Cloning into '/Users/zongxun/.pyenv/plugins/pyenv-doctor'...
remote: Enumerating objects: 11, done.
remote: Counting objects: 100% (11/11), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 11 (delta 1), reused 5 (delta 0), pack-reused 0
Receiving objects: 100% (11/11), 38.72 KiB | 535.00 KiB/s, done.
Resolving deltas: 100% (1/1), done.
Cloning into '/Users/zongxun/.pyenv/plugins/pyenv-update'...
remote: Enumerating objects: 10, done.
remote: Counting objects: 100% (10/10), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 10 (delta 1), reused 5 (delta 0), pack-reused 0
Receiving objects: 100% (10/10), done.
Resolving deltas: 100% (1/1), done.
Cloning into '/Users/zongxun/.pyenv/plugins/pyenv-virtualenv'...
remote: Enumerating objects: 63, done.
remote: Counting objects: 100% (63/63), done.
remote: Compressing objects: 100% (56/56), done.
remote: Total 63 (delta 11), reused 27 (delta 0), pack-reused 0
Receiving objects: 100% (63/63), 40.25 KiB | 502.00 KiB/s, done.
Resolving deltas: 100% (11/11), done.WARNING: seems you still have not added 'pyenv' to the load path.# Load pyenv automatically by appending
# the following to
# ~/.bash_profile if it exists, otherwise ~/.profile (for login shells)
# and ~/.bashrc (for interactive shells) :export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"# Restart your shell for the changes to take effect.# Load pyenv-virtualenv automatically by adding
# the following to ~/.bashrc:eval "$(pyenv virtualenv-init -)"

这将安装pyenv以及一些有用的插件:

  • pyenv:实际的pyenv应用程序
  • pyenv-virtualenv:pyenv 和虚拟环境的插件
  • pyenv-update: 更新插件pyenv
  • pyenv-doctor:用于验证是否安装了pyenv和构建依赖项的插件
  • pyenv-which-ext:自动查找系统命令的插件

注意:上述命令与下载pyenv-installer脚本并运行它的效果相同本地。因此,如果您想确切地了解正在运行的内容,可以自行查看该文件。或者,如果您确实不想运行脚本,可以查看手动安装说明。

~/.zshrc 添加以上内容:

$ vim ~/.zshrc 
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

然后

exec "$SHELL" # Or just restart your terminal

3. pyenv 安装 Python

查看可安装列表

pyenv install --list 

可用的CPython 3.6 到 3.8

pyenv install --list | grep " 3\.[678]"

查看所有 Jython 版本

$ pyenv install --list | grep "jython"jython-devjython-2.5.0jython-2.5-devjython-2.5.1jython-2.5.2jython-2.5.3jython-2.5.4-rc1jython-2.7.0jython-2.7.1jython-2.7.2

安装 3.12.1

pyenv install 3.12.1

安装 3.12.1并显示安装过程

pyenv install -v 3.12.1

最后正常输出如下显示安装成功:

......
Successfully installed pip-23.2.1
/var/folders/0_/3h6j4mkd2156rcrkqzj3b9600000gn/T/python-build.20231218163320.47316 ~
~
Installed Python-3.12.1 to /Users/zongxun/.pyenv/versions/3.12.1

在终端安装也许会卡住,例如:

$ pyenv install -v 3.12.1
python-build: use openssl@3 from homebrew
python-build: use readline from homebrew
/var/folders/0_/3h6j4mkd2156rcrkqzj3b9600000gn/T/python-build.20231218161915.46244 ~
Downloading Python-3.12.1.tar.xz...
-> https://www.python.org/ftp/python/3.12.1/Python-3.12.1.tar.xz

可以先浏览器下载下来,再将包放到安装的默认位置(~/.pyenv/versions/),再执行安装pyenv install -v 3.12.1

已安装的位置

$ ls ~/.pyenv/versions/
3.12.1

4. 卸载 python

您的所有版本都将位于此处。这很方便,因为删除这些版本很简单:

$ rm -rf ~/.pyenv/versions/3.12.1

当然pyenv还提供了卸载特定Python版本的命令:

$ pyenv uninstall 3.12.1

5. 管理 python

检查您有哪些可用的 Python 版本:

$ pyenv versions
* system (set by /Users/zongxun/.pyenv/version)3.10.133.12.1
  • 表示 system Python 版本当前处于活动状态。您还会注意到,这是由根 pyenv 目录中的文件设置的。这意味着,默认情况下,您仍在使用系统 Python:
$ python3 -V
Python 3.9.6
$  which python3
/Users/zongxun/.pyenv/shims/python3

如果您想使用版本 3.10.13,则可以使用global 命令:

$ pyenv global 3.10.13
$ python -V
Python 3.10.13

python 版本从 3.9.6 切换为 3.10.13了。

测试命令

python -m test

这将启动大量内部 Python 测试来验证您的安装。您可以轻松地观看测试通过。

如果您想返回到默认的 Python 系统版本,您可以运行以下命令:

$ pyenv global system
$ python -V
Python 3.9.6

参考:

  • Python 官网
  • 官方 pyenv Github 下载
  • https://realpython.com/intro-to-pyenv/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/221800.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于EasyDarwin、ffmpeg实现rtsp推流

目录 1 安装EasyDarwin 2 编译安装ffmpeg 3 启动EasyDarwin 4 ffmepg推流 5 百度网盘备份 某项目中测试时需要用到推流,于是用EasyDarwin、ffmpeg实现了RTSP推流,简单记录下过程, 1 安装EasyDarwin 这个可以去官网下载:Eas…

【jvm从入门到实战】(九) 垃圾回收(2)-垃圾回收器

垃圾回收器是垃圾回收算法的具体实现。 由于垃圾回收器分为年轻代和老年代,除了G1之外其他垃圾回收器必须成对组合进行使用 垃圾回收器的组合使用关系图如下。 常用的组合如下: Serial(新生代) Serial Old(老年代) Pa…

Jenkins 构建环境指南

目录 Delete workspace before build starts(常用) Use secret text(s) or file(s) (常用) Add timestamps to the Console Output (常用) Inspect build log for published build scans Terminate a …

Python与Flink的完美融合:合流基本操作解析

更多资料获取 📚 个人网站:ipengtao.com Apache Flink 是一个流式处理框架,支持复杂事件处理和大规模数据分析。在 Flink 中,合流(Join)是一种常见的操作,用于将两个或多个流中的数据按照指定条…

【jsonview去除排序】如何让jsonview不自动排序(已解决)

✈️涉及知识 如何取消JSON默认数值排序,JSON.parse()函数排序关闭,取消JSON.parse排序,Json格式化校验,jsonview排序问题解决方法。 🥇专栏🥇:前端技术,json格式化 💂关…

【模式识别】解锁降维奥秘:深度剖析PCA人脸识别技术

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《模式之谜 | 数据奇迹解码》⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 目录 🌌1 初识模式识…

【力扣100】543.二叉树的直径

添加链接描述 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def __init__(self):self.max 0def diamete…

【C语言】自定义类型——枚举、联合体

引言 对枚举、联合体进行介绍,包括枚举的声明、枚举的优点,联合体的声明、联合体的大小。 ✨ 猪巴戒:个人主页✨ 所属专栏:《C语言进阶》 🎈跟着猪巴戒,一起学习C语言🎈 目录 引言 枚举 枚举…

【JVM从入门到实战】(八)垃圾回收(1)

内存泄漏:指的是不再使用的对象在系统中未被回收,内存泄漏的积累可能会导致内存溢出 什么是垃圾回收 Java中为了简化对象的释放,引入了自动的垃圾回收(Garbage Collection简称GC)机制。通过垃 圾回收器来对不再使用的…

速度与稳定性的完美结合:深入横测ToDesk、TeamViewer和AnyDesk

文章目录 前言什么是远程办公?远程办公的优势 远程办公软件横测对象远程软件的注册&安装ToDeskTeamViewerAnyDesk 各场景下的实操体验1.办公文件传输及丢包率2.玩游戏操作延迟、稳定3.追剧画质流畅度、稳定4.临时技术支持SOS模式 收费情况与设备连接数总结 前言…

VueCron使用方法

1)什么是vueCron Vue Cron 是基于 Vue.js 的定时任务管理组件,它提供了一种简单易用的方式来设定和管理定时任务。Vue Cron 提供了一个类似于 Linux crontab 的界面,用户可以通过它来创建、编辑和删除定时任务。 2)安装依赖及应…

HuggingFace下载模型

目录 方式一:网页下载 方式二:Git下载 方式一:网页下载 方式二:Git下载 有些模型的使用方法页面会写git clone的地址,有些没写,直接复制网页地址即可 网页地址: ​https://huggingface.co/…

下午好~ 我的论文【yolov5】(第四期)

文章目录 简介模型Mosaic数据增强自适应锚框计算自适应图片缩放Focus结构CSP结构 NeckCIOU_Lossnms非极大值抑制代码最后 简介 YOLO V4没过多久YOLO V5就出来了。YOLO V5的模型架构是与V4非常相近的。 模型 Yolov5官方代码中,给出的目标检测网络中一共有4个版本&…

【Java 集合】ConcurrentHashMap (JDK 1.8 版本)

1 ConcurrentHashMap 简介 Map 一种存储键值对 (key-value) 的数据结构, 可以通过 key 快速地定位到需要的 value, 在 Java 中是一个使用频率很高的一个数据结构。一般情况下, 我们都是可以直接使用它的实现类 HashMap 就能满足需求了。 但是 HashMap 在多线程情况, 并不是一个…

截断霍夫曼编码

截断霍夫曼编码是一种数据压缩技术,它基于霍夫曼编码的原理,通过截断霍夫曼树,减少编码中的冗余信息,实现更高效的数据压缩。在本文中,我们将详细探讨截断霍夫曼编码的原理、应用及其优势。 一、霍夫曼编码简介 霍夫曼…

真一键关闭BitLocker!

网管小贾 / sysadm.cc 同事老莫近日喜提新电脑一台,遂请我周末去他家帮忙给电脑开开光。 我口送佛号欣然应允,心中暗道又能喝到嫂夫人的私人定制绝美养生鸡汤,嘿嘿,阿弥陀佛,善哉善哉! 老莫家就租住在市中…

Actuator内存泄露及利用Swagger未授权自动化测试实现

目录 0x00 前言 0x01 Actuator 泄露及利用 1、Actuator heapdump 内存泄露 2、知道泄露后如何进一步利用 3、如何发现 Actuator 泄露(白盒/黑盒) 0x02 Swagger自动化测试 1、什么是Swagger? 2、PostmanBurpSuiteXray 联动 3、思考 0x…

腾讯云debian服务器的连接与初始化

目录 1. 远程连接2. 软件下载3. 设置开机自启动 1. 远程连接 腾讯云给的服务器在安装好系统之后,只需要在防火墙里面添加一个白名单(ip 或者域名)就能访问了。 浏览器打开https://www.ipip.net/,在左下角找到自己所用的WIFI的公…

java使用面向对象实现图书管理系统

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

MFC静态链接+libtiff静态链接提示LNK2005和LNK4098

编译报错 1>msvcrt.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_infoAAEABV0Z) 已经在 libcmtd.lib(typinfo.obj) 中定义 1>msvcrt.lib(ti_inst.obj) : error LNK2005: "pr…