是否可以确定当前脚本是否在 virtualenv 环境中运行?
原文由 miracle2k 发布,翻译遵循 CC BY-SA 4.0 许可协议
是否可以确定当前脚本是否在 virtualenv 环境中运行?
原文由 miracle2k 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答843 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
最可靠的检查方法是检查是否
sys.prefix == sys.base_prefix
。如果它们相等,则您不在虚拟环境中;如果他们不平等,你就是。在虚拟环境中,sys.prefix
指向虚拟环境,sys.base_prefix
是创建virtualenv的系统Python的前缀。以上始终适用于 Python 3 stdlib
venv
和最近的virtualenv
(自版本 20 起)。 Older versions ofvirtualenv
usedsys.real_prefix
instead ofsys.base_prefix
(andsys.real_prefix
did not exist outside a virtual environment), and in Python 3.3 and更早的sys.base_prefix
从未存在过。因此,处理所有这些情况的完全可靠的检查可能如下所示:如果您只关心受支持的 Python 版本和最新
virtualenv
,您可以将get_base_prefix_compat()
替换为sys.base_prefix
。使用
VIRTUAL_ENV
环境变量不可靠。它由 virtualenvactivate
shell 脚本设置,但是通过直接从 virtualenv 的bin/
(或Scripts
)运行可执行文件,无需激活即可使用 virtualenv ,在这种情况下$VIRTUAL_ENV
将不会被设置。或者可以在 shell 中激活 virtualenv 时直接执行非 virtualenv Python 二进制文件,在这种情况下$VIRTUAL_ENV
可能会设置在实际上并未在该 virtualenv 中运行的 Python 进程中。