【发布时间】:2017-06-14 06:54:38
【问题描述】:
我在 OSX 上遇到问题,#!/usr/bin/env python3 导致环境变量(例如库路径(例如 LD_LIBRARY_PATH))丢失。在 Linux 上它可以正常工作。
阅读env 上的手册页,它似乎不应该这样做。它应该只在我请求时修改环境,而我不是。
什么是保护环境的便携式shebang线?
注意:我正在检测问题,因为在我的一个程序上调用 subprocess.open 失败,因为它找不到其中一个库。但是,如果我以交互方式启动 python,则相同的调用可以正常工作。
【问题讨论】:
-
没关系,似乎只有当前 shell 中的 某些 env vars 确实没有传播。我用一个通用的进行了测试,效果很好。
-
这应该只发生在
-或-i通过的情况下,通过简单阅读env的 MacOS 手册页。 -
@CharlesDuffy:
LD_LIBRARY_PATH=foo env env | grep LD_LIBRARY_PATH也重现了这个问题,而FOO=foo env env | grep FOO可以正常工作。看起来像是一些特定的过滤。 -
也相关:Unable to set DYLD_FALLBACK_LIBRARY_PATH in shell on OSX 10.11.1。
env是一个/usr/bin二进制文件,因为某些环境变量被 系统完整性保护 剥离,所以受到“保护”。