VIRTUAL_ENV环境变量用于什么?

4

阅读Python的virtualenv/bin/activate脚本时,我注意到除了明显的对PATH变量的操作外,它还设置并导出VIRTUAL_ENV。我想知道这是否重要,以及谁或什么使用此变量?

我之所以问这个问题,是因为我认为您可以不使用activate脚本,而是执行以下操作:

$ venv/bin/python3 ...

或者

$ venv/bin/flake8

为了在一次性命令或Makefile中显式使用虚拟环境。现在我意识到它并不完全等同,因为缺少VIRTUAL_ENV变量。

2个回答

4
我在venv文档中找到了答案:

当虚拟环境处于活动状态时,VIRTUAL_ENV 环境变量会被设置为虚拟环境的路径。 这可以用于检查是否在虚拟环境内运行。

进一步地:

您不需要专门激活一个环境;激活只是将虚拟环境的二进制目录加入到您的路径,以便“python”调用虚拟环境的Python解释器,并且您可以运行已安装的脚本而无需使用完整路径。然而,在虚拟环境中安装的所有脚本都应该能够在不激活它的情况下运行,并自动使用虚拟环境的Python运行。

因此根据文档,您不必激活venv,但是那时您没有设置VIRTUAL_ENV变量。 这意味着VIRTUAL_ENV不是检查您是否在venv中运行的非常可靠的方法。

1
人们主要用它来检测虚拟环境是否已激活;有时用于查找其目录。几乎没有人需要它用于一次性命令,因为环境会立即激活和停用。
我使用它来停用virtualenvwrapper的mktmpenv创建的临时环境,在我的~/.bashrc中。
# Clean up python virtual environment on exit
# See https://virtualenvwrapper.readthedocs.io/en/latest/tips.html#clean-up-environments-on-exit

trap '[ "$VIRTUAL_ENV" ] && deactivate' EXIT

已停用的临时环境将自动销毁并从磁盘中删除。

我还使用它在子shell中重新激活一个继承其父shell变量的虚拟环境:

if [ -n "$VIRTUAL_ENV" ] && ! type deactivate >/dev/null 2>&1; then
    . "$VIRTUAL_ENV/bin/activate"
fi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接