如何使用`env python3`并保留调用环境?

How to use `env python3` and retaining the calling environment?

我在 OSX 上有一个问题,即 #!/usr/bin/env python3 导致环境变量,例如库路径(例如 LD_LIBRARY_PATH)丢失。在 Linux 它工作正常。

阅读 env 上的手册页,它似乎不应该这样做。它应该只在我请求时才修改环境,但我没有。

什么是保护环境的便携式 shebang 线?

注意:我正在检测问题,因为在我的一个程序上调用 subprocess.open 失败,因为它找不到库之一。然而,如果我以交互方式启动 python,则相同的调用工作正常。

这是工作中的OS X System Integrity Protection;某些 'dangerous' 环境变量,例如 DYLD_LIBRARY_PATH,并且正如您所发现的,LD_LIBRARY_PATH 不会传递给具有 /usr/bin/bin 路径的任何二进制文件。

因此,/usr/bin/env 永远不会看到任何几个环境变量,也无法将它们传递给它生成的 python3 子进程。

查看有关该主题的其他几篇帖子:

如果您使用 subprocess,我会检查 shebang 行,提取以 env 命名的二进制文件,在您的命令前加上该二进制文件,然后完全绕过 env .