使用了一段时间,我发现这玩意根本不是什么神器,简直就是垃圾,安装多版本总是失败,并且重复在系统环境中重复添加值(好几百行),我不建议使用这个工具,我建议使用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的更多相关文章

  1. 你应该学会的Python多版本管理工具Pyenv

    目录 Pyenv 简介 安装pyenv 通过pyenv安装python各种发行版 pyenv命令 多版本Python的管理 Pyenv常见问题Wiki Pyenv 简介 首先,该工具是在类linux环 ...

  2. Ubuntu中python多版本管理工具-pyenv

    ubuntu系统版本:16.04 # lsb_release -aNo LSB modules are available.Distributor ID: UbuntuDescription: Ubu ...

  3. 管理 Python 多版本,pyenv 用起来

    介绍 学习使用pyenv在本地安装多个 Python 版本,这样既不影响工作,也不影响生活~ pyenv 可让你轻松地在多个 Python 版本之间切换.它简单.不引人注目,并且遵循 UNIX 的单一 ...

  4. Python linux 上的管理工具 pyenv 安装, pip 使用, python项目(版本分割, 项目分割, 虚拟环境创建)

    01: 假设你有一个最小环境安装的 centos-6.x 的linux操作系统 02: 安装 git => yum -y install git 03: 安装依赖 => yum -y in ...

  5. Python多版本共存管理工具之pyenv

    目录 Table of Contents 1. 安装pyenv 2. 安装Python 3.0 使用python 参考 Table of Contents 经常遇到这样的情况: 系统自带的Python ...

  6. Python包管理工具和多版本环境管理

    1. Python包管理工具 在安装Python包的过程中,经常涉及到distutils.setuptools.distribute.setup.py.easy_install.easy_instal ...

  7. python版本管理工具pyenv和包管理工具pipenv

    一.pyenv版本管理工具 pyenv是一个python版本管理工具,可以实现轻松切换多个python版本 它可根据每个用户更改全局python版本,也可以为每个项目指定python版本,还可以管理v ...

  8. 【python】pyenv与virtualenv安装,实现python多版本多项目管理

    踩了很多坑,记录一下这次试验,本次测试环境:Linux centos7 64位. pyenv是一个python版本管理工具,它能够进行全局的python版本切换,也可以为单个项目提供对应的python ...

  9. python多版本管理工具(pyenv)

    在学习和利用python开发的很多情况下,需要多版本的Python并存.此时需要在系统中安装多个Python,但又不能影响系统自带的 Python.pyenv 就是这样一个 Python 版本管理器. ...

随机推荐

  1. 2019牛客暑期多校训练营(第十场)F.Popping Balloons(线段树)

    题意:现在给你n个点 现在让你横着划三条线间距为r 然后竖着划三条线间距同样为r 现在让你求经过最多的点数 思路:我们首先建一棵关于y区间的线段树 然后枚举x轴 每次更新重叠的点 然后再更新回去 找一 ...

  2. AtCoder - agc043_a 和 POJ - 2336 dp

    题意: 给你一个n行m列由'#'和'.'构成的矩阵,你需要从(1,1)点走到(n,m)点,你每次只能向右或者向下走,且只能走'.'的位置. 你可以执行操作改变矩阵: 你可以选取两个点,r0,c0;r1 ...

  3. WIN7使用msg命令发送消息心得

    昨天搞了一下午+一晚上,终于捣鼓出了一些奇奇怪怪的操作,成功发送了消息. 应实验要求,博主有幸在家里搞到了两台win7,其他的系统是不是这么操作就不太清楚了. 一开始实验指导书上是用net send发 ...

  4. Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020 - Final) C. The Delivery Dilemma (贪心,结构体排序)

    题意:你要买\(n\)份午饭,你可以选择自己去买,或者叫外卖,每份午饭\(i\)自己去买需要消耗时间\(b_i\),叫外卖需要\(a_i\),外卖可以同时送,自己只能买完一份后回家再去买下一份,问最少 ...

  5. 【转】分布式事务之——tcc-transaction分布式TCC型事务框架搭建与实战案例

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/73731363 一.背景 有一定分布式开发经验的朋友都知道,产品/项目/系统最初为了 ...

  6. Linux-用户/用户组身份提权

    sudo 身份提权(更安全) su命令在切换用户身份时,如果每个普通用户都能拿到root用户的密码,当其中某个用户不小心泄漏了root的密码,那系统会变得非常不安全. 为了改进这个问题,从而产生了su ...

  7. 鸟哥的linux私房菜——第十六章学习(程序管理与 SELinux 初探)

    第十六章.程序管理与 SE Linux 初探 在 Linux 系统当中:"触发任何一个事件时,系统都会将他定义成为一个程序,并且给予这个程序一个 ID ,称为 PID,同时依据启发这个程序的 ...

  8. MSE,RMSE

    MSE: Mean Squared Error 均方误差是指参数估计值与参数真值之差平方的期望值; MSE可以评价数据的变化程度,MSE的值越小,说明预测模型描述实验数据具有更好的精确度. RMSE  ...

  9. Win10 Nodejs搭建http-server注意点

    下载安装,并用命令行查看版本:如果提示输入命令找不到等,可能是没有安装成功,或者是环境变量引起的: 如果在提示安装不成功可能是win10权限问题,最好使用管理员模式运行cmd,再用cmd命令打开安装文 ...

  10. Node.js 返回 JSON 数据

    Node.js 返回 JSON 数据 request.end([data[, encoding]][, callback]) var http = require('http'); const log ...