2017-01-28 3 views
4

#!/usr/bin/env python3がライブラリパス(LD_LIBRARY_PATHなど)などの環境変数を失っているというOSXの問題があります。 Linuxでは正しく動作します。`env python3`を使って呼び出し環境を保持する方法は?

envのmanページを読むと、これを行う必要がないようです。私はそれを要求すればそれは環境を変更するだけで、私はそうではありません。

環境を保存する携帯用シバンラインとは何ですか?

注:私のプログラムのいずれかでsubprocess.openへの呼び出しがライブラリの1つを見つけることができないので、問題が検出されています。しかし、私が対話的にPythonを起動しても、同じ呼び出しがうまくいきます。

+0

気にしないで、現在のシェルの*特定の* env変数のみが実際には伝播していないようです。私は一般的なものでテストし、それがうまくいった。 –

+0

これは、 '-'または' -i'が渡されたときにのみ、 'env'のMacOSのマニュアルページを読んで行う必要があります。 –

+0

たとえば、 'env env'は内部インスタンスに存在するすべての環境変数を表示します。 –

答えて

3

これは仕事中のOS X System Integrity Protectionです。 DYLD_LIBRARY_PATHなどの特定の「危険な」環境変数、および発見したとおり、LD_LIBRARY_PATHは、/usr/binまたは/binパスのバイナリに渡されません。

このように、/usr/bin/envは、いくつかの環境変数のいずれも見ることはなく、子プロセスにそれらを渡すことはできません。

主題のいくつかの他の記事を参照してください:

あなたがsubprocessを使用している場合、私は、シェバングラインをチェック抽出したいですenvの後に名前が付けられたバイナリは、そのバイナリでコマンドに接頭辞を付け、バイパスenv

+0

私はサブプロセスを呼び出すことができましたが、私はこれらを呼び出す他のスクリプトを用意しています。 –

+0

いずれにせよ、これは本当に吸う。 OSXのこの「機能」は、開発環境をセットアップすることを非常に困難にしています。 –

+0

うん、それはかなり困難になります。これらの変数にアクセスする必要のあるスクリプトで '/ usr/bin/env'を使わないようにしてください。 –

関連する問題