我意外地发现,当一个子进程与启动subprocess.Popen,两个环境变量命名__PYVENV_LAUNCHER__,并_分别设置为Python解释器和脚本的路径.这两个变量似乎影响了行为pip.我想知道它们的确切含义.
__PYENV_LAUNCHER__是在 Mac 上构建 Python 框架的工作方式的实现细节。
在框架构建(一种特殊的构建,允许您运行由 Python 提供支持的 GUI 应用程序)中,Apple 对您可以使用该进程执行的操作设置了严格的限制。为了突破这些限制,Python 二进制文件实际上是一个包装器,然后将“真正的”Python 二进制文件作为子进程(Resources/Python.app/Contents/MacOS/Python同一框架包中的二进制文件)启动。
为了让子进程知道用于启动包装器二进制文件的路径是什么,包装器设置环境__PYVENV_LAUNCHER__变量,然后实际的 Python 二进制文件使用该路径而不是argv[0](由操作系统设置)。这对于启动器二进制文件的硬链接副本(例如在 virtualenv 中使用的副本)非常重要。PYVENV因此变量中的名称。
该变量确实不应该在完成其工作之后泄漏,因此一旦在未来的 Python 版本中读取,就会将其从环境中删除。
| 归档时间: |
|
| 查看次数: |
391 次 |
| 最近记录: |