python VIRTUAL_ENV环境变量用于什么

nxagd54h  于 2023-05-27  发布在  Python
关注(0)|答案(2)|浏览(109)

阅读Python的virtualenv/bin/activate脚本时,我注意到除了对PATH变量进行明显的操作外,它还设置和导出VIRTUAL_ENV。我想知道这是否重要,谁或什么使用这个变量?
我之所以这样问,是因为我假设你可以不使用activate脚本,而是执行以下操作:

$ venv/bin/python3 ...

$ venv/bin/flake8

明确使用虚拟环境的一次性命令或makefile。现在我意识到它并不完全等价,因为VIRTUAL_ENV变量将丢失。

pu82cl6c

pu82cl6c1#

我在venv的文档中找到了答案:
当虚拟环境处于活动状态时,VIRTUAL_ENV环境变量被设置为虚拟环境的路径。可用于检查是否在虚拟环境中运行
此外:

您不需要特别激活环境;激活只是将虚拟环境的二进制目录前置到您的路径,这样“python”就可以调用虚拟环境的Python解释器,您可以运行安装的脚本,而不必使用它们的完整路径。但是,安装在虚拟环境中的所有脚本都应该在不激活它的情况下运行,并自动与虚拟环境的Python一起运行。

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

6yt4nkrj

6yt4nkrj2#

People use it for anything,主要用于检测virtualenv是否被激活;有时是为了找到它的目录。几乎没有人需要它来执行一次性命令,因为环境会立即激活和停用。
我使用它来停用~/.bashrc中由virtualenvwrapper的mktmpenv创建的temporary环境:

# 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中的virtualenv,该子shell从其父shell继承了该变量:

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

相关问题