我在OSX上遇到问题#!/usr/bin/env python3
导致环境变量(例如库路径(例如LD_LIBRARY_PATH))丢失。在Linux上它可以正常工作。
阅读env
上的手册页似乎不应该这样做。如果我提出要求,它应该只是修改环境,而我不是。
什么是保护环境的便携式shebang系列?
注意:我正在检测到这个问题,因为在我的某个程序上调用subprocess.open
失败了,因为找不到其中一个库。然而,如果我以交互方式启动python,同样的调用工作正常。
答案 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>