Python多版本自由切换

井井有条
• 阅读 13631

1. 概述

端午节有雷阵雨,不好出门,正好有一个python程序要调试,可构建环境是python 2.7.5,一个较老的环境了,而新程序是基于python3写的,看来要切换python到旧版本调试,想方便的切换python版本,就想到了python版本切换工具。网上搜索了一下,pyenv可堪此任。pyenv支持linux、windows,且linux下支持更完美,我是win10,以下实操就以win10为例了。

2. 实操记录

  • 安装pyenv

机器原来安装了python3.8.x,采用pip安装pyenv,pip install pyenv。

  • 配置环境变量

为在windows下随时访问pyenv,需要将安装的pyenv执行文件加入路径中,另外也需要加入pyenv的shims垫片目录(这个名词挺神奇的吧,其实后面会讲到,这个操作确实挺神奇的,且听后面分解)。
加入PYENV环境变更到系统变量中,我的值如下:
PYENV = C:\Users\Admin\AppData\Local\Programs\Python\pyenv-win

将pyenvr.bat的路径加入系统path变量中,另外将这个shims垫片目录也加入path变量中,完成后,如下所示:
PATH = %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;%SYSTEMROOT%\System32\OpenSSH\;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;C:\Program Files\nodejs\;%PYENV%\bin;%PYENV%\shims;

文不表深意,上图:

Python多版本自由切换

至此,pyenv已经成功安装,可用了,打开一个命令窗口(win+R, 输入cmd回车),输入pyenv,会显示pyenv的版本号及常用命令,安装成功。

>pyenv
pyenv 1.2.4

Usage: pyenv <command> [<args>]

Some useful pyenv commands are:
   commands    List all available pyenv commands
   duplicate   Creates a duplicate python environment
   local       Set or show the local application-specific Python version
   global      Set or show the global Python version
   shell       Set or show the shell-specific Python version
   install     Install a Python version using python-build
   uninstall   Uninstall a specific Python version
   rehash      Rehash pyenv shims (run this after installing executables)
   version     Show the current Python version and its origin
   versions    List all Python versions available to pyenv
   exec        Runs an executable by first preparing PATH so that the selected Python
   which       Display the full path to an executable
   whence      List all Python versions that contain the given executable

See `pyenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/pyenv-win/pyenv-win#readme
  • 安装不同的python版本

pyenv install --list
查看可安装的python版本

pyenv install 3.8.0
安装python 3.8.0

pyenv install 2.7.5
安装python 2.7.5

更新pyenv命令:
pyenv rehash

  • 切换python版本

我希望平时使用python 3.8.0版本,设置常用的版本为该版本,命令如下:pyenv global 3.8.0,运行后,以后使用python时,都会缺省使用该版本。

我是要调试旧版本python程序,在本目录下,需要特定的python版本,故采用在本目录设定特定版本的方式,命令如下:pyenv local 2.7.5,这样,以后只要进入这个目录,运行python就是python 2.7.5。

>python
Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>
  • 安装pip

先安装setuptools,下载:https://pypi.org/project/setu...,解压,运行python setup.py install。
再安装pip,下载:https://pypi.org/project/pip/...,解压,运行python setup.py install。
更新pyenv命令:pyenv rehash

3. 其它参数知识

  • pyenv的工作原理

pyenv的工作原理其实很简单,将它自己管理的Python目录插到环境变量里,这样一来系统在搜索Python的时候第一个找到的就是pyenv管理的Python环境。这个插到最前面的路径就叫做垫片(shims),也就是%PYENV%shims目录。

当执行pyenv命令的时候,它会有global(当前系统)、local(当前目录)、shell三个等级来管理python环境,按照以下顺序来决定要使用的Python版本:
优先级shell > local > global

如果PYENV_VERSION环境变量存在,则使用该变量指定的python版本。你可以使用pyenv shell 命令来在当前shell环境中设置该环境变量。

如果当前目录中存在文件:.python-version,则使用该变量指定的python版本。你可以用pyenv local 命令来修改当前目录的.python-version文件。

如何上面2个变量不存在,则自底向上搜索各层上级目录,找到的第一个.python-version就是要使用的python版本, 直到到达文件系统根目录,即全局的$(pyenv root)/version文件。可以使用 pyenv global 命令来修改。如果全局版本文件不存在, pyenv假设你使用系统安装的Python. (换句话说就是未安装pyenv时环境变量中找到的Python)。

[global]

timeout = 6000

index-url = https://mirrors.aliyun.com/pypi/simple/

trusted-host = mirrors.aliyun.com

再使用pip安装软件,快捷如飞。

  • pyenv其它常用命令

pyenv shims 显示shims下的文件
pyenv rehash 生成shims目录及相关文件,如python, pip等
pyenv install --list 查看可安装的python版本
pyenv install 3.8.0 安装python 3.8.0版本
pyenv global 3.8.0 在全局指定python运行的版本号
pyenv local 2.7.5 在当前目录下生成python版本文件,在本目录下运行python时,运行采用该版本文件中指定的版本
pyenv shell 2.7.5 在当前命令窗口指定运行的python版本,本窗口中运行python时会采用该指定的版本
pyenv shell --unset 在当前命令窗口内去除指定的python版本,会采用local或global设定的python版本
pyenv version 查看当前处于激活状态的版本,括号中内容表示这个版本是由哪条途径激活的(global、local、shell)
pyenv versions 查看当前pyenv已安装的所有版本,处于激活状态的版本前以 * 标示。

>pyenv versions
* 2.7.5 (set by D:\01xxx\source\python\.python-version)
  3.8.0

pyenv uninstall 2.7.5 卸载一个版本

pyenv rehash 为所有已安装的可执行文件 (如:~/pyenv/versions/*/bin/*) 创建 shims,因此,每当你增删了 Python 版本或带有可执行文件的包(如 pip)以后,都应该执行一次本命令
主要执行代码:pyenv-winlibexecpyenv.vbs
pyenv各python版本的安装路径:pyenv-winversions

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
Scapy 从入门到放弃
0x00前言最近闲的没事,抽空了解下地表最强的嗅探和收发包的工具:scapy。scapy是一个python模块,使用简单,并且能灵活地构造各种数据包,是进行网络安全审计的好帮手。0x01安装因为2020年python官方便不再支持python2,所以使用python3安装。!(https://oscimg.oschina.net/os
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这