Following system colour scheme - Python 增强提案 Selected dark colour scheme - Python 增强提案 Selected light colour scheme - Python 增强提案

Python 增强提案

PEP 486 – 使 Python 启动器能够识别虚拟环境

作者:
Paul Moore <p.f.moore at gmail.com>
状态:
最终
类型:
标准跟踪
创建:
2015年2月12日
Python 版本:
3.5
历史记录:
2015年2月12日
决议:
Python-Dev 消息

目录

摘要

Python 的 Windows 安装程序包含一个启动器,用于定位要运行的正确 Python 解释器(参见 PEP 397)。但是,启动器无法识别虚拟环境(virtualenv [1] 或基于 PEP 405 的环境),因此无法用于从活动虚拟环境运行命令。

本 PEP 提出使启动器“能够识别虚拟环境”。这意味着,当运行时未指定要使用的显式 Python 解释器,启动器将首先使用当前活动的虚拟环境(如果有),然后才会回退到配置的默认 Python。

基本原理

安装了多个 Python 副本的 Windows 用户需要一种选择要使用哪个副本的方法。Python 启动器通过 py 命令提供了此功能,该命令可用于运行配置的“默认” Python 或特定解释器,方法是使用命令行参数。因此,典型用法如下:

# Run the Python interactive interpreter
py

# Execute an installed module
py -m pip install pytest
py -m pytest

在使用虚拟环境时,py 启动器不知道虚拟环境处于活动状态,并将继续使用系统 Python。因此,需要不同的命令调用才能在虚拟环境中运行相同的命令

# Run the Python interactive interpreter
python

# Execute an installed module (these could use python -m,
# which is longer to type but is a little more similar to the
# launcher approach)
pip install pytest
py.test

必须使用不同的命令容易出错,并且在许多情况下,错误很难立即发现。本 PEP 提出使 py 命令能够与虚拟环境一起使用,以便在所有情况下都可以使用第一种命令形式。

实现

无论 virtualenv 还是核心 venv 模块在激活虚拟环境时都会设置环境变量 VIRTUAL_ENV。本 PEP 提出,启动器在每次运行系统的“默认” Python 解释器(即,当未使用诸如 py -2.7 之类的特定版本标志时)时检查 VIRTUAL_ENV 环境变量,如果存在,则运行虚拟环境的 Python 解释器,而不是默认的系统 Python。

上面提到的“默认” Python 解释器(根据 PEP 397)要么是系统上安装的最新版本的 Python,要么是通过 py.ini 配置文件配置的版本。当用户在命令行上指定显式 Python 版本时,始终将使用此版本(与目前一样)。

对脚本启动的影响

除了交互式使用外,启动器还用作 Python 脚本的 Windows 文件关联。在这种情况下,脚本开头处的“shebang”(#!)行用于识别要运行的解释器。可以使用完全限定路径,或使用特定版本的 Python(python3python2,甚至 python3.5),或使用通用 python,这意味着使用默认解释器。

启动器还查找特定的 shebang 行 #!/usr/bin/env python。在 Unix 上,env 程序在 $PATH 上搜索命令并运行找到的命令。类似地,使用此 shebang 行,启动器将在用户的当前 %PATH% 上查找 python.exe 的副本,并将运行该副本。

由于激活虚拟环境意味着它被添加到 PATH 中,因此无需进行特殊处理即可使用活动虚拟环境运行脚本 - 它们只需要使用 #!/usr/bin/env python shebang 行,就像在 Unix 上一样。(如果没有激活的虚拟环境,并且 PATH 上没有 python.exe,启动器将查找默认 Python,就像 shebang 行是 #!python 一样)。

排除项

本 PEP 并未尝试推广在 Windows 上使用启动器运行 Python。大多数现有文档假设用户使用 python 作为运行 Python 的命令,并且(例如)使用 pip 运行已安装的 Python 命令。预计这些文档不会更改,并且选择管理其 PATH 环境变量的用户可以继续使用此形式。本 PEP 的重点纯粹是允许那些在处理其系统 Python 安装时更喜欢使用启动器的用户,能够在使用虚拟环境时继续这样做。

参考实现

实现提议行为的补丁可在 http://bugs.python.org/issue23465 获取

参考文献


来源:https://github.com/python/peps/blob/main/peps/pep-0486.rst

上次修改时间:2023-09-09 17:39:29 GMT