Python 虚拟环境

对于 Python 3.3 及更高版本,PEP 405 引入了对“Python 虚拟环境”概念的解释器级支持。每个虚拟环境都有自己的 Python 二进制文件(允许创建具有各种 Python 版本的环境),并且可以在其 site 目录中拥有自己独立的已安装 Python 包集,但与基本安装的 Python 共享标准库。虽然虚拟环境的概念在此更新之前就已存在,但之前没有标准化机制来声明或发现它们。

虚拟环境的运行时检测

在运行时,可以通过 sys.prefix(运行解释器的文件系统位置)与 sys.base_prefix(标准库目录的默认文件系统位置)具有不同的值来识别虚拟环境。

Python 标准库文档中关于 venv 模块的 venv 的工作原理 涵盖了这一点以及在交互式操作系统 shell 中“激活”虚拟环境的概念(此激活步骤是可选的,因此它所做的更改不能可靠地用于检测 Python 程序是否在虚拟环境中运行)。

将安装环境声明为 Python 虚拟环境

PEP 405 中所述,一个最简单的 Python 虚拟环境仅包含 Python 二进制文件的一个副本或符号链接,以及一个 site-packages 目录和一个带有 home 键的 pyvenv.cfg 文件,该键指示在哪里可以找到 Python 标准库模块。

虽然旨在满足标准 venv 模块的需求,但这种分离安装和 pyvenv.cfg 文件的方法可以被任何希望 Python 特定的工具知道它们已经在虚拟环境中运行且不需要或不希望进一步嵌套环境的 Python 安装提供者使用。

即使没有 pyvenv.cfg 文件,任何导致 sys.prefixsys.base_prefix 具有不同值的方案(例如 sitecustomize.py,修补已安装的 Python 运行时),同时仍在 sysconfig 中提供匹配的默认包安装方案,都将被检测并作为 Python 虚拟环境运行。

历史

  • 2012 年 5 月:本规范已通过 PEP 405 批准。