2012-03-14 10 views
1

に設定されている私は、envコマンドを実行した場合、私はこの出力を得る:Pythonは、環境変数を取得しませんが、それはマックOS

TERM_PROGRAM=Apple_Terminal 
GPG_AGENT_INFO=/Users/paganotti/.gnupg/S.gpg-agent:346:1 
TERM=xterm-color 
SHELL=/bin/bash 
TMPDIR=/var/folders/BM/BMT-0W4+H5yVS5fJngFdsk+++TI/-Tmp-/ 
Apple_PubSub_Socket_Render=/tmp/launch-V50MvM/Render 
TERM_PROGRAM_VERSION=273.1 
USER=paganotti 
COMMAND_MODE=unix2003 
SSH_AUTH_SOCK=/tmp/launch-llkTBf/Listeners 
__CF_USER_TEXT_ENCODING=0x1F5:0:0 
PATH=/Library/Frameworks/Python.framework/Versions/2.7/bin:/opt/local/bin:/opt/local/sbin:/Library/Frameworks/Python.framework/Versions/3.2/bin:/Users/paganotti/Documents/Project/ZendFramework-1.11.11-minimal/bin/zf.sh:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin://usr/local/git/bin/git:/Library/Frameworks/Python.framework/Versions/3.1/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/usr/local/ImageMagick/bin:/usr/local/MacGPG2/bin:/usr/texbin:/usr/X11/bin:/Users/paganotti/Sviluppo/android-sdk-1.5_r3/tools 
PWD=/Users/paganotti 
LANG=it_IT.UTF-8 
SHLVL=1 
HOME=/Users/paganotti 
LOGNAME=paganotti 
GIT_PYTHON_GIT_EXECUTABLE=/usr/local/git/bin/git 
DISPLAY=/tmp/launch-aqcM4a/org.x:0 
_=/usr/bin/env 

私のpythonでGIT_PYTHON_GIT_EXECUTABLE変数を取得してみてくださいね:

GIT_PYTHON_GIT_EXECUTABLE = os.getenv('GIT_PYTHON_GIT_EXECUTABLE') 
    print GIT_PYTHON_GIT_EXECUTABLE 

が、出力プリント:

None 

GIT_PYTHON_GIT_EXECUTABLE変数を表示していないようなので? どうしたの?

UPDATEは

私はpycharmで環境変数を設定し、今ではそれを読んで、私の実際のアプリケーションでは、私はPyQtはライブラリのQThreadクラスを使用します。 私のアプリケーションは起動時にpyqtライブラリの上に構築され、Qthreadを実行します。 Qthreadではgitpython関数を実行します。 GitPython関数はサブプロセスを開始し、GIT_PYTHON_GIT_EXECUTABLEを読み込もうとしますが、変数を読み取ることはできません。

+0

あなたはどのようにPythonを呼び出しますか? – vartec

+0

python intepreterがPython intepreterに設定されています:/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 – paganotti

+0

環境変数を設定したシェルからPycharmを実行していますか? – Dunes

答えて

2

設定した環境変数にPythonインタプリタがアクセスできるようにするには、Pycharmを起動する前に環境を設定し、環境変数を設定したシェルからPycharmを実行する必要があります。さもなければ、Pycharmはその変数へのアクセスを取得しませんし、その子プロセス(Python)もアクセスしません。

なぜなら、環境変数を設定すると、現在のシェルとそのサブプロセスだけでは、マシン全体に対してグローバルではないからです。また、各サブプロセスは、起動時に親環境のスナップショットのみを取得します。親の環境への将来の変更は、子プロセスに反映されません(またその逆もあります)。

ホームディレクトリで.profile(またはbashを使用している場合は.bash_profile)というファイルを編集することで、システム全体に変数をグローバルにすることができます。存在しない場合は作成してください。ファイルで、必要なエクスポートコマンドを追加します。このファイルは、コンピュータに最初にログインしたときに実行されます(このためには、再度ログインする必要があります)。あなたがログインした後のすべてのプログラムは、プロファイルファイルに設定された環境変数にアクセスできます。これは、ログインすると新しいシェルが生成され、実行する他のすべてのプロセスが実行されるからです。

+0

私はpycharmに環境変数を設定しましたが、それを読んでいますが、私の実際のアプリケーションではqthreadを使用しています。私はテストを持っていて、私は変数を読み取ることができません。この変数は、gitPythonライブラリがgitの実行可能ファイルを検索するために使用します。私はQthreadを使うことができますか? – paganotti

+0

C++で別のスレッドを開始し、そこからサブプロセスとしてPythonを実行しているということですか? – Dunes

+0

いいえ、申し訳ありません。私はpyqtでアプリケーションをビルドしています。私のアプリケーションが起動すると、Qthreadが実行されます。そのQthreadではenvirement変数を読み込もうとします – paganotti

関連する問題