确定 Python 是否在 virtualenv 中运行

新手上路,请多包涵

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

原文由 miracle2k 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 362
2 个回答

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

以上始终适用于 Python 3 stdlib venv 和最近的 virtualenv (自版本 20 起)。 Older versions of virtualenv used sys.real_prefix instead of sys.base_prefix (and sys.real_prefix did not exist outside a virtual environment), and in Python 3.3 and更早的 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/ (或 Scripts )运行可执行文件,无需激活即可使用 virtualenv ,在这种情况下 $VIRTUAL_ENV 将不会被设置。或者可以在 shell 中激活 virtualenv 时直接执行非 virtualenv Python 二进制文件,在这种情况下 $VIRTUAL_ENV 可能会设置在实际上并未在该 virtualenv 中运行的 Python 进程中。

原文由 Carl Meyer 发布,翻译遵循 CC BY-SA 4.0 许可协议

尝试使用 pip -V (注意大写 V)

如果您正在运行虚拟环境。它会显示环境的路径。的位置。

原文由 loki l 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题