os.getenv ('CORENLP_HOME') возвращает None, а os.environ ['CORENLP_HOME'] возвращает KeyError, но echo $ CORENLP_HOME возвращает путь в терминале - PullRequest
0 голосов
/ 28 марта 2020

Я знаю, что существует много подобных вопросов, но я не могу понять, что здесь происходит. Я пытаюсь следовать инструкциям для этой оболочки Stanford CoreNLP python здесь , один из шагов - установить переменную окружения CORENLP_HOME.

Я выполнил команду:

export CORENLP_HOME=/path/to/stanford-corenlp-full-2018-10-05

Перезапустил терминал или фактически добавил в мой ~/.bash_profile. Теперь, когда я делаю echo $CORENLP_HOME в терминале, я могу правильно видеть путь. Но с другой стороны, если код оболочки corenlp пытается найти тот же путь через код python, он возвращает None.

Поэтому я отдельно проверил две команды python, код оболочки использует os.getenv():

import os 

print(os.getenv('CORENLP_HOME')) #prints None
print(os.environ['CORENLP_HOME']) #Throws a KeyError exception

Версия MacOS: 10.15.4; Python: 3.7.6

У меня нет очень глубокого понимания переменных среды в целом, я хочу понять, что здесь происходит, или если я упускаю что-то простое. Рад предоставить больше информации!

1 Ответ

0 голосов
/ 30 марта 2020

Переменные среды не являются глобальными в модели процесса UNIX. Каждому процессу предоставляется набор переменных среды родительским процессом, который его запускает. Обычно это копия переменных окружения родителя. Если вы не запускаете pycharm из оболочки, которая запустила команду export, pycharm не увидит переменные среды этой оболочки.

Описанное вами поведение означает, что вы не запускаете pycharm из оболочки, которая выполнила export CORENLP_HOME=/path/to/stanford-corenlp-full-2018-10-05.

PS, модель процесса UNIX также означает, что процесс не может изменять переменные среды другого процесса.

...