__PYVENV_LAUNCHER__环境变量的含义是什么?

时间:2014-10-12 09:51:16

标签: python pip

我意外地注意到,当使用subprocess.Popen启动子进程时,名为__PYVENV_LAUNCHER___的两个环境变量分别设置为python解释器和脚本的路径。这两个变量似乎会影响pip的行为。我想知道它们的确切含义。

1 个答案:

答案 0 :(得分:2)

__PYENV_LAUNCHER__是在Mac上构建Python框架的工作方式的实现细节。

framework build(一种特殊的构建,它允许您运行由Python驱动的GUI应用程序)中,Apple对您可以使用该过程进行严格限制。为了克服这些限制,Python二进制文件实际上是一个wrapper,然后将“真实的” Python二进制文件作为子进程启动(同一框架包中的Resources/Python.app/Contents/MacOS/Python二进制文件)。

为让子进程知道用于启动包装二进制文件的路径,包装器设置了__PYVENV_LAUNCHER__环境变量,然后实际的Python二进制文件使用了它而不是argv[0](由操作系统设置)。这对于启动程序二进制文件的硬链接副本(例如在virtualenv中使用的副本)非常重要。因此,变量中的名称为PYVENV

该变量确实不应泄漏超出其工作范围的范围,所以it is being removed from the environment once read in future Python releases