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

时间:2017-01-28 18:49:46

标签: python macos shebang

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

阅读env上的手册页似乎不应该这样做。如果我提出要求,它应该只是修改环境,而我不是。

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

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

1 个答案:

答案 0 :(得分:3)

这是OS X System Integrity Protection在工作;某些“危险”环境变量,例如DYLD_LIBRARY_PATH,以及您发现的LD_LIBRARY_PATH,不会传递给具有/usr/bin/bin路径的任何二进制文件。

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

查看有关该主题的其他几篇文章:

如果您使用subprocess,我会检查shebang行,提取以env命名的二进制文件,在命令前加上该二进制文件,并完全绕过env。< / p>