2017-01-28 2 views
4

Ich habe ein Problem auf OSX, dass #!/usr/bin/env python3 verursacht die Umgebungsvariablen, wie Bibliothek Pfade (LD_LIBRARY_PATH zum Beispiel), verloren gehen. Unter Linux funktioniert es korrekt.Wie benutzt man `env python3` und behält die aufrufende Umgebung bei?

Lesen der Manpage auf env es scheint nicht, es sollte dies tun. Es sollte nur die Umgebung ändern, wenn ich es anfordere, und ich bin es nicht.

Was ist eine tragbare Shebang-Linie, die die Umwelt schont?

Hinweis: Ich erkenne das Problem, da ein Aufruf an subprocess.open auf einem meiner Programme fehlschlägt, da es eine der Bibliotheken nicht finden kann. Wenn ich Python interaktiv starte, funktioniert derselbe Aufruf gut.

+0

Egal, nur * bestimmte * env vars in der aktuellen Shell sind in der Tat nicht propagiert es scheint. Ich habe mit einem generischen getestet und das hat funktioniert. –

+0

Dies sollte nur passieren, wenn '-' oder' -i' übergeben werden, durch einfaches Lesen der MacOS-Manpage für 'env'. –

+0

'env env' zum Beispiel zeigt alle Umgebungsvariablen an, die in der inneren Instanz vorhanden sind. –

Antwort

3

Dies ist das OS X System Integrity Protection bei der Arbeit; bestimmte 'gefährliche' Umgebungsvariablen wie DYLD_LIBRARY_PATH und, wie Sie festgestellt haben, LD_LIBRARY_PATH, werden nicht an irgendwelche binäre mit einem /usr/bin oder /bin Pfad übergeben.

Als solches sieht /usr/bin/env nie einige Umgebungsvariablen und kann diese nicht an den untergeordneten Prozess python3 weitergeben.

Siehe mehrere andere Beiträge zum Thema:

Wenn Sie subprocess verwenden, die ich für die Shebang-Zeile überprüfen würde, extrahieren die binär nach env benannt, setzen Sie Ihren Befehl mit dieser Binärdatei voran und umgehen Sie env insgesamt.

+0

Für meinen Aufruf zum Subprozess könnte ich das tun, aber ich habe andere Skripte, die diese aufrufen (die Build-Skripte), die keine Kontrolle darüber haben, wie sie aufgerufen werden. –

+0

In jedem Fall ist das wirklich scheiße. Dieses "Feature" von OSX macht es sehr schwierig, eine Entwicklungsumgebung einzurichten. –

+0

Ja, es macht die Dinge erheblich schwieriger; Vermeiden Sie die Verwendung von '/ usr/bin/env' in Skripten, die Zugriff auf diese Variablen benötigen, ist das Beste, was ich im Moment tun kann. –

Verwandte Themen