乐趣区

Python多版本自由切换

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;

文不表深意,上图:

至此,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)。

  • 将 pip 源设置为国内源的方法 (https://www.cnblogs.com/af1y/…
    新建 pip.ini 于 pip.exe 目录下,内容如下:
[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

退出移动版