gpt4 book ai didi

python - 确定 Python 是否在 virtualenv 中运行

转载 作者:IT老高 更新时间:2023-10-28 12:12:21 27 4
gpt4 key购买 nike

是否可以确定当前脚本是否在 virtualenv 环境中运行?

最佳答案

最可靠的检查方法是检查 sys.prefix == sys.base_prefix .如果它们相等,则您不在虚拟环境中;如果他们不平等,你就是。在虚拟环境中,sys.prefix指向虚拟环境,sys.base_prefix是创建 virtualenv 的系统 Python 的前缀。

以上内容始终适用于 Python 3 stdlib venv对于最近的 virtualenv (从版本 20 开始)。 virtualenv 的旧版本使用 sys.real_prefix而不是 sys.base_prefix (并且 sys.real_prefix 在虚拟环境之外不存在),在 Python 3.3 和更早版本中 sys.base_prefix从来不存在。因此,处理所有这些情况的完全可靠的检查可能如下所示:

import sys

def get_base_prefix_compat():
"""Get base/real prefix, or sys.prefix if there is none."""
return getattr(sys, "base_prefix", None) or getattr(sys, "real_prefix", None) or sys.prefix

def in_virtualenv():
return get_base_prefix_compat() != sys.prefix

如果您只关心支持的 Python 版本和最新的 virtualenv , 你可以替换 get_base_prefix_compat()只需 sys.base_prefix .

使用 VIRTUAL_ENV环境变量不可靠。它由 virtualenv activate 设置shell 脚本,但是可以通过直接从 virtualenv 的 bin/ 运行可执行文件来使用 virtualenv 而无需激活。 (或 Scripts )目录,在这种情况下为 $VIRTUAL_ENV不会设置。或者,在 shell 中激活 virtualenv 时,可以直接执行 non-virtualenv Python 二进制文件,在这种情况下 $VIRTUAL_ENV可能会设置在 Python 进程中,而该进程实际上并未在该 virtualenv 中运行。

关于python - 确定 Python 是否在 virtualenv 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1871549/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com