Python 虚拟环境#
对于 Python 3.3 及更高版本,PEP 405 引入了对“Python 虚拟环境”概念的解释器级别支持。每个虚拟环境都有自己的 Python 二进制文件(允许创建具有不同 Python 版本的环境),并且可以在其站点目录中拥有自己独立的已安装 Python 软件包集,但与基础已安装 Python 共享标准库。虽然虚拟环境的概念在此更新之前就已存在,但以前没有标准化的机制来声明或发现它们。
虚拟环境的运行时检测#
在运行时,虚拟环境可以通过 sys.prefix
(正在运行的解释器的文件系统位置)与 sys.base_prefix
(标准库目录的默认文件系统位置)具有不同的值来识别。
venv 的工作原理 在 venv
模块的 Python 标准库文档中介绍了这一点,以及在交互式操作系统 shell 中“激活”虚拟环境的概念(此激活步骤是可选的,因此它所做的更改不能可靠地用于检测 Python 程序是否在虚拟环境中运行)。
将安装环境声明为 Python 虚拟环境#
如 PEP 405 中所述,最简单的形式的 Python 虚拟环境仅包含 Python 二进制文件的副本或符号链接,以及一个 site-packages
目录和一个 pyvenv.cfg
文件,其中包含一个 home
键,指示在哪里可以找到 Python 标准库模块。
虽然旨在满足标准 venv
模块的需求,但这种分离的安装和 pyvenv.cfg
文件方法可用于任何希望 Python 特定工具知道它们已经在虚拟环境中运行并且不需要或不希望进一步环境嵌套的 Python 安装提供程序。
即使没有 pyvenv.cfg
文件,任何导致 sys.prefix
和 sys.base_prefix
具有不同值的方法(例如 sitecustomize.py
、修补已安装的 Python 运行时),同时仍然在 sysconfig
中提供匹配的默认包安装方案,都将被检测到并表现为 Python 虚拟环境。
历史#
2012 年 5 月:此规范通过 PEP 405 获得批准。