Python не получает переменную окружения, но он установлен на Mac OS - PullRequest
1 голос
/ 14 марта 2012

если я запускаю команду env, я получаю следующие выходные данные:

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

Я пытаюсь получить переменную GIT_PYTHON_GIT_EXECUTABLE с python:

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

, но выводим вывод:

    None

потому что, кажется, не видят переменную GIT_PYTHON_GIT_EXECUTABLE?Что не так?

ОБНОВЛЕНИЕ

Я установил переменную окружения в pycharm, и теперь она это читает, но в моем реальном приложении я использую класс QThread библиотеки pyqt.Мое приложение строится поверх библиотеки pyqt, когда запускается, оно выполняет Qthread.В Qthread будет выполнять функции gitpython.Функции GitPython запускают подпроцесс и пытаются прочитать GIT_PYTHON_GIT_EXECUTABLE, но он не может прочитать переменную.

1 Ответ

2 голосов
/ 14 марта 2012

Чтобы интерпретатор python мог получить доступ к заданной вами переменной среды, вы должны установить среду перед тем, как вызывать Pycharm, и запустить Pycharm из оболочки, в которой вы устанавливаете переменную среды. В противном случае Pycharm не получит доступ к переменной и ни один из ее дочерних процессов (python).

Причина в том, что когда вы устанавливаете переменную среды, она не глобальна для всей машины, а только для текущей оболочки и ее подпроцессов. И каждый подпроцесс получает только моментальный снимок среды родителя при запуске. Будущие изменения среды в родительском процессе не отражаются в дочернем процессе (и наоборот).

Вы можете сделать переменную глобальной для всей системы, отредактировав файл с именем .profile (или предпочтительно .bash_profile, если вы используете bash) в вашем домашнем каталоге. Если они не существуют, просто создайте их. В файл просто добавьте команду экспорта, которую вы хотите. Этот файл запускается при первом входе в систему на вашем компьютере (поэтому вам нужно будет заново зарегистрироваться, чтобы это работало). Все будущие программы после входа в систему будут иметь доступ к переменным среды, установленным в файле профиля. Это работает, потому что при входе в систему создается новая оболочка, из которой будут запускаться все остальные процессы, которые вы запускаете.

...