Python Virtual Env "activate_this.py" 究竟做了什么?
What does Python Virtual Env "activate_this.py" actually do?
我正在开发一个 python CLI 项目,不幸的是,它在虚拟环境方面有点复杂,因为它必须处理多个环境。
在我寻求让我的工具正常和稳健地工作的过程中,我遇到了 Virtual Env 的“activate_this.py”文件,它是在 .venv/bin/ 目录中生成的。
我认为这可能对我的需求有用,所以我开始试验它,但我还没有真正理解它实际上在做什么。
例如,它说当必须从现有的 python 解释器调用文件时应该使用脚本(这是我的情况),但必须激活虚拟环境。
我很难理解的是: 在给定文件上激活虚拟环境到底是什么意思? (因为我们没有更改解释器)
此外,在 activate_this.py 文件中有这段代码:
# add the virtual environments libraries to the host python import mechanism
prev_length = len(sys.path)
for lib in "../lib/python3.9/site-packages".split(os.pathsep):
path = os.path.realpath(os.path.join(bin_dir, lib))
site.addsitedir(path.decode("utf-8") if "" else path)
sys.path[:] = sys.path[prev_length:] + sys.path[0:prev_length]
这是否意味着您现在可以导入安装在您刚刚激活的虚拟环境中的库,即使它们没有安装在基本解释器的环境中?
你明白了。它会重写您的 sys.path
以公开安装在虚拟环境中的内容,并切断对虚拟环境中全局安装的 third-party 库 not 的访问。
我正在开发一个 python CLI 项目,不幸的是,它在虚拟环境方面有点复杂,因为它必须处理多个环境。
在我寻求让我的工具正常和稳健地工作的过程中,我遇到了 Virtual Env 的“activate_this.py”文件,它是在 .venv/bin/ 目录中生成的。 我认为这可能对我的需求有用,所以我开始试验它,但我还没有真正理解它实际上在做什么。
例如,它说当必须从现有的 python 解释器调用文件时应该使用脚本(这是我的情况),但必须激活虚拟环境。
我很难理解的是: 在给定文件上激活虚拟环境到底是什么意思? (因为我们没有更改解释器)
此外,在 activate_this.py 文件中有这段代码:
# add the virtual environments libraries to the host python import mechanism
prev_length = len(sys.path)
for lib in "../lib/python3.9/site-packages".split(os.pathsep):
path = os.path.realpath(os.path.join(bin_dir, lib))
site.addsitedir(path.decode("utf-8") if "" else path)
sys.path[:] = sys.path[prev_length:] + sys.path[0:prev_length]
这是否意味着您现在可以导入安装在您刚刚激活的虚拟环境中的库,即使它们没有安装在基本解释器的环境中?
你明白了。它会重写您的 sys.path
以公开安装在虚拟环境中的内容,并切断对虚拟环境中全局安装的 third-party 库 not 的访问。