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 []
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 ' 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