Python版本控制工具 py launcher 的使用

py launcher 适用于Windows用户,适用于电脑上有多个Python版本的用户

如今,最新的Python版本的Windows安装程序中肯定附带 py launcher 的安装

文章内容涉及许多晦涩的词汇,不懂就问

  • The Python launcher for Windows(py launcher是一个实用程序,可帮助查找和执行不同的Python版本
  • py launcher 允许你通过脚本(或命令行:cmd、power shell)设置要使用Python版本
  • 与环境变量(PATH变量)不同,默认情况下 py launcher 将为你选择最合适的Python版本

目录一:入门

方法一:在命令行中指定Python版本

Changed in version 3.6.

在你通过安装程序安装Python 3.3及更高版本时, 你若勾选了

  • py launcher
  • Add Python to environment variables

安装程序会自动为你配置环境变量

python安装路径\
python安装路径\Scripts\
%appdata%\Local\Programs\Python\Launcher\

py launcher 与所有可用的Python版本兼容,因此安装哪个版本都没有关系

(1)要检查py launcher是否可用,请在命令提示符(cmd或者power shell)中执行以下命令:

py

命令执行后,电脑上已安装的最新版本的Python被启动

(2)假设您安装了多个版本的Python(例如2.7和3.8),执行上述命令后您会注意到Python 3.8被启动,那么,要启动低版本的Python 2.7,请尝试以下命令:

py -2.7

(3)如果你想要启动电脑上最新版本的Python 2.x,请尝试以下命令:

py -2

执行命令后,电脑上Python 2.x的最新版本被启动

启动电脑上最新版本的Python 3.x,与此同理

(4)如果看到以下错误,则说明您没有安装启动器:

'py' is not recognized as an internal or external command,
operable program or batch file.

注意事项:虚拟环境

New in version 3.5.

如果py launcher在没有明确的Python版本规范的情况下运行,并且虚拟环境(使用标准库venv模块或外部virtualenv工具创建)处于活动状态,

py launcher将运行虚拟环境的解释器,而不是全局的解释器。

要运行全局解释器:

  1. 请停用虚拟环境,
  2. 或者 显式指定全局Python版本。

方法二:在Python文件中指定Python版本

(1)创建一个hello.py文件用作测试,包含以下内容

#! python
import sys
sys.stdout.write("hello from Python %s\n" % (sys.version,))

在hello.py所在的目录中,执行以下命令:

py hello.py

你会注意到终端中打印了最新的Python 2.x的版本号。

(2)现在将上述代码的第一行更改为:

#! python3

重新执行命令,打印最新的Python 3.x信息。

(3)与上述命令行示例一样,您可以指定一个更明确的版本限定符。假设您已安装Python 2.6,请尝试将第一行更改为:

#! python2.6

终端会打印出2.6版本信息

(3)你应该有所理解,

#! python

就是

#! python2

你可能会想#! python为什么不是#! python3?这是一个兼容性问题,而且在后文的目录二中可以对此进行修改

(4)py launcher 在安装时已经与Python文件关联(即关联.py, .pyw,.pyc文件)

这意味着,当您双击Windows资源管理器中的这些文件之一时,将使用py launcher

因此通过Python脚本第一行的内容,指定使用应使用的Python版本

方法二补充:Shebang Lines

如果Python文件的第一行以#!开头,则称之为 “shebang” lines

Linux和其他类似Unix操作系统对此类行(“shebang” lines)具有本地支持,“shebang” lines 通常在Linux和其他类似Unix系统上用于指示应如何执行Python脚本

py launcher 允许Windows上的Python脚本使用相同的功能,并且上面的示例(目录一 > 方法二)演示了 “shebang” lines 的用法

为了允许Python脚本中的shebang行在Unix和Windows之间可移植,py launcher 支持许多“虚拟”命令来指定要使用的解释器。支持的虚拟命令是:

  • #! /usr/bin/env python

  • #! /usr/bin/python

  • #! /usr/local/bin/python

  • #! python

(1)此四行命令在安装有py launcher 的Windows系统中,脚本是可以直接是使用的

(2)但是在类Unix系统中,只支持前三个命令

例如,如果Python脚本的开头第一行为

#! /usr/bin/python

将会运行默认的Python。

由于许多在Unix上运行的Python脚本已经有了这一行,因此你会发现Windows中py launcher可以直接使用这些脚本而无需进行修改。

但如果您要在Windows上编写新脚本(又希望在Unix上使用),则应使用以/usr开头的shebang lines 之一

(3)上面的任何虚拟命令都可以带有显式版本(仅是主版本,或者是主版本和次版本)后缀。

此外,可以通过在次要版本之后添加“ -32”来请求32位版本。
/usr/bin/python2.7-32将请求32位Python2.7的使用。

(4)New in version 3.7:py launcher3.7开始,可以通过后缀“ -64”请求64位版本。此外,可以指定一个主版本、一个没有次版本的架构(例如/usr/bin/python3-64)。

(5)/usr/bin/envshebang lines的形式还有另一种特殊性质:在查找已安装的Python解释器之前,此表单将搜索可执行文件PATH用于Python可执行文件。这对应于Unix env程序的行为,该行为执行PATH 搜索。

目录二:设置Shebang Lines中默认Python版本

环境变量PY_PYTHON

在某些情况下,Python脚本中包含版本限定符(通过Shebang Lines设置,上文有详细讲解),以指示该脚本将使用哪个版本的Python

你需要先明确几个概念

#! python 3.8-64
  • 这是一行shebang lines
  • 版本限定符:3.8-64
  • 主版本:3
  • 次版本:8
  • -32-64来指定是请求32位还是64位实现
    请注意,“-64”选项仅适用于Python 3.7或更高版本附带的py launch

如果在Python脚本中找不到版本限定符,则可以通过环境变量 PY_PYTHON设置为指定默认版本限定符(如果这句话你没看懂,请不要纠结,往下面看就懂了)

您可以参考下图设置环境变量 PY_PYTHON

默认情况下,shellbang lines中python指的是python2,可以进行修改

  • 前提:shellbang lines皆指Python脚本中的第一行对版本设置

  • 如果未设置相关选项,

    • 则shellbang lines中python和 python2将使用安装的最新Python 2.x版本,
    • shellbang lines中python3将使用安装的最新Python3.x
  • 如果完全指定了版本,

    • 因此shellbang lines中python3.1和python2.7将完全不参考任何选项
  • 如果环境变量PY_PYTHON=3,

    • 则shellbang lines中python和python3将都使用最新安装的Python 3版本
    • shellbang lines中python2将使用安装的最新Python2.x
  • 如果环境变量PY_PYTHON=3.1-32,

    • 则shellbang lines中python将使用3.1版本的32位实现,
    • 而shellbang lines中python3将使用最新安装的Python(由于指定了主要版本,因此完全不考虑PY_PYTHON)
  • 如果PY_PYTHON=3和PY_PYTHON3=3.1,

    • 则shellbang lines中 python和python3都将专门使用3.1

py.ini文件

  • 除了环境变量PY_PYTHON外,可以在py launch使用的py.ini文件中配置相同的设置
  • py.ini配置文件的优先级低于环境变量PY_PYTHON

py launch 将搜索两个py.ini配置文件

  • 优先级低:在py launch所在的路径下(默认为C:\Users\zgh\AppData\Local\Programs\Python\Launcher
  • 优先级高:一个在C:\Users\用户名\AppData\Local路径下
  • 如果路径下没有py.ini文件,请自行创建

请注意,INI文件中的键名不区分大小写。

例如:

  • 设置PY_PYTHON=3.1等同于包含以下内容的INI文件:
[defaults]
python=3.1
  • 设置PY_PYTHON=3和PY_PYTHON3=3.1等效于INI文件,其中包含:
[defaults]
python=3
python3=3.1

实力不足,若有错误,欢迎指正

参考资料:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章