Python切换版本工具pyenv
使用了一段时间,我发现这玩意根本不是什么神器,简直就是垃圾,安装多版本总是失败,并且重复在系统环境中重复添加值(好几百行),我不建议使用这个工具,我建议使用anaconda。
由于Python的2.x与3.x版本的一些语法使用是不相同的,所以在写和使用Python程序上都会遇到需要切换版本的情况。下面介绍切换Python版本的工具pyenv。
安装pyenv
这里以mac举例,需要先安装brew,没有安装的先去安装一下,现在安装brew和pyenv都需要在终端上设置一下代理。
brew update
brew install pyenv
配置一下zsh
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
zsh
安装与查看py版本
# 查看可安装的版本
pyenv install -l
# 安装与卸载 python 3.6.6 , 注意安装py版本也需要设置一下终端代理,不然可能会超时导致失败
pyenv install 3.6.6
pyenv uninstall 3.6.6
# 查看当前的 Python 版本
pyenv version
# 查看已经安装的Python版本
pyenv versions

安装后的py版本在/Users/你的用户名/.pyenv/versions 目录。
➜ versions pwd
/Users/thoth/.pyenv/versions
➜ versions ls
3.6.6
➜ versions
切换py版本
# global 全局设置 一般不建议改变全局设置
pyenv global <python版本>
# shell 会话设置 只影响当前的shell会话
pyenv shell <python版本>
# 取消 shell 会话的设置
pyenv shell --unset
# local 本地设置 只影响所在文件夹
pyenv local <python版本>
优先级关系是:shell > local > global
这里做一下实验,写个小脚本运行一下:
seeversion.py
import sys
print(sys.version)
print(sys.version_info)
验证切换到3.3.6
# 设置版本
➜ program pyenv shell 3.6.6
# 查看版本
➜ program pyenv versions
system
* 3.6.6 (set by /Users/thoth/program/.python-version)
# 运行脚本和预期一致
➜ program python seeversion.py
2.7.16 (default, Dec 13 2019, 18:00:32)
[GCC 4.2.1 Compatible Apple LLVM 11.0.0 (clang-1100.0.32.4) (-macos10.15-objc-s
sys.version_info(major=2, minor=7, micro=16, releaselevel='final', serial=0)
验证切换回系统默认版本
# 设置版本
➜ pyenv local system
# 查看版本
➜ ~ pyenv versions
* system (set by /Users/thoth/.python-version)
3.6.6
# 运行脚本和预期一致
➜ ~ python seeversion.py
2.7.16 (default, Dec 13 2019, 18:00:32)
[GCC 4.2.1 Compatible Apple LLVM 11.0.0 (clang-1100.0.32.4) (-macos10.15-objc-s
sys.version_info(major=2, minor=7, micro=16, releaselevel='final', serial=0)
总结:
我感觉全局就是你在终端的那个目录运行,都有效,但是这样设置未免太浪费,毕竟我们一般只在几个固定目录运行py脚本。
shell就是你在当前打开的终端有效,关闭后无效。
local就是,比如你cd进program目录,就在当前的.program目录内有效。其它目录无效。
结合ide使用示例
想让ide运行你安装的版本,设置运行版本路径为:/Users/thoth/.pyenv/versions/3.6.6/bin/python即可。

和virtualenv的一些区别
pyenv可以很方便地在终端和ide切换不同版本。但对于需要开发不同py程序的开发人员来说,不同的项目意味着每个项目都有不同的扩展类库,这些类库都统一安装在相应版本的python环境,会让他们感到很不舒服,不方便管理,也会臃肿。就会希望每个项目的环境都是独立的,纯粹的,干净的。有了这个挑剔的需求,virtualenv就是为这个而生的。
参考文献
https://www.sqlsec.com/2019/12/pyenv.html#toc-heading-5
https://www.jianshu.com/p/8aaf2525fa80
Python切换版本工具pyenv的更多相关文章
- 你应该学会的Python多版本管理工具Pyenv
目录 Pyenv 简介 安装pyenv 通过pyenv安装python各种发行版 pyenv命令 多版本Python的管理 Pyenv常见问题Wiki Pyenv 简介 首先,该工具是在类linux环 ...
- Ubuntu中python多版本管理工具-pyenv
ubuntu系统版本:16.04 # lsb_release -aNo LSB modules are available.Distributor ID: UbuntuDescription: Ubu ...
- 管理 Python 多版本,pyenv 用起来
介绍 学习使用pyenv在本地安装多个 Python 版本,这样既不影响工作,也不影响生活~ pyenv 可让你轻松地在多个 Python 版本之间切换.它简单.不引人注目,并且遵循 UNIX 的单一 ...
- Python linux 上的管理工具 pyenv 安装, pip 使用, python项目(版本分割, 项目分割, 虚拟环境创建)
01: 假设你有一个最小环境安装的 centos-6.x 的linux操作系统 02: 安装 git => yum -y install git 03: 安装依赖 => yum -y in ...
- Python多版本共存管理工具之pyenv
目录 Table of Contents 1. 安装pyenv 2. 安装Python 3.0 使用python 参考 Table of Contents 经常遇到这样的情况: 系统自带的Python ...
- Python包管理工具和多版本环境管理
1. Python包管理工具 在安装Python包的过程中,经常涉及到distutils.setuptools.distribute.setup.py.easy_install.easy_instal ...
- python版本管理工具pyenv和包管理工具pipenv
一.pyenv版本管理工具 pyenv是一个python版本管理工具,可以实现轻松切换多个python版本 它可根据每个用户更改全局python版本,也可以为每个项目指定python版本,还可以管理v ...
- 【python】pyenv与virtualenv安装,实现python多版本多项目管理
踩了很多坑,记录一下这次试验,本次测试环境:Linux centos7 64位. pyenv是一个python版本管理工具,它能够进行全局的python版本切换,也可以为单个项目提供对应的python ...
- python多版本管理工具(pyenv)
在学习和利用python开发的很多情况下,需要多版本的Python并存.此时需要在系统中安装多个Python,但又不能影响系统自带的 Python.pyenv 就是这样一个 Python 版本管理器. ...
随机推荐
- Educational Codeforces Round 17
Educational Codeforces Round 17 A. k-th divisor 水题,把所有因子找出来排序然后找第\(k\)大 view code //#pragma GCC opti ...
- Uva 10815 Andy's First Dictionary(字符串)
题目链接:https://vjudge.net/problem/UVA-10815 题意 找出一段文本中的所有单词,以小写形式按照字典序输出. 思路 用空白符替换文本中所有非字母字符后再次读入. 代码 ...
- java的静态代码块和类变量的隐式覆盖
静态代码块特点:随着类的加载执行一次,且仅会执行一次 作用:初始化类中的static修饰的变量(static修饰的变量称为类变量.类变量和静态代码块差不多,类变量仅会被初始化一次) 一.静态代码块写法 ...
- 【noi 2.7_2987】小兔子捡金币(算法效率)
题意:问蛇形回文的访问次序. 解法:很基础的一道题,先算出询问的点处在第几环,再用4个while一个个走一遍这一圈.P.S.我一直想办法想用不用while(),可是真的一直WA!所以用while()既 ...
- Codeforces Testing Round #16 C.Skier
题意: 一个人在雪地上滑雪,每次可以向上下左右四个方向移动一个单位,如果这条路径没有被访问过,则需要5秒的时间,如果被访问过,则需要1秒(注意:判断的是两点之间的距离,不是单纯的点).给你他的行动轨迹 ...
- 13. 从0学ARM-Cortex-A9 RTC裸机程序编写
一.RTC RTC(Real-Time Clock) 实时时钟. RTC是集成电路,通常称为时钟芯片.在一个嵌入式系统中,通常采用RTC来提供可靠的系统时间,包括时分秒和年月日等,而且要求在系统处于关 ...
- SPI/QSPI通信协议详解和应用
SPi是高速全双工的串行总线,通常应用在通讯速率较高的场合. SS:从设备选择信号线,也称片选信号线 每个从设备都有一个独立的SS信号线,信号线独占主机的一个引脚,及有多少个从设备就有多少个片选信号线 ...
- 微服务架构学习Day01-SpringBoot入门
基本概念 SpringBoot的优点: 可以创建独立的Spring应用 SpringBoot嵌入Tomcat,Jetty和Unsertow, 不需要部署war文件 根据需要通过maven获取start ...
- 深入理解JavaScript垃圾回收
JavaScript中的垃圾回收是自动进行的,在平常开发中我们可能并不在意,但是深入理解JavaScript中的垃圾回收却是必要的; JavaScript 中主要的内存管理概念是 可达性,简而言之就是 ...
- TypeScript constructor public cause duplicate bug
TypeScript constructor public cause duplicate bug constructor public const log = console.log; // con ...