Подтвердить что ты не робот

Как сделать изменения переменной среды в Python?

Из того, что я прочитал, любые изменения переменных среды в экземпляре Python доступны только в этом экземпляре и исчезают после закрытия экземпляра. Есть ли способ заставить их придерживаться, переведя их в систему?

Причина, по которой мне нужно это сделать, - это то, что в студии, где я работаю, такие инструменты, как Maya, сильно зависят от переменных среды для настройки путей на нескольких платформах.

Мой тестовый код

import os
os.environ['FAKE'] = 'C:\\'

Открытие другого экземпляра Python и запрос os.environ['FAKE'] дает KeyError.

ПРИМЕЧАНИЕ. Переносимость будет проблемой, но небольшой API, который я пишу, сможет проверить версию ОС и при необходимости запустить различные команды.

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

4b9b3361

Ответ 1

В Windows вы можете вносить изменения в переменные среды, постоянные через реестр, с помощью этого рецепта, хотя это кажется излишним.

Чтобы ответить на вопрос Брайана, чего вы пытаетесь достичь? Вероятно, есть более простой способ.

Ответ 2

заставить их придерживаться, система?

Я думаю, вы немного смущены здесь. Не существует "системной" среды. Каждый процесс имеет свою собственную среду как часть его памяти. Процесс может изменить только собственную среду. Процесс может установить начальную среду для создаваемых ею процессов.

Если вы действительно думаете, что вам нужно установить переменные среды для системы, вам нужно будет поменять их в том месте, которое они изначально загружают, например, из реестра или в файл конфигурации оболочки в Linux.

Ответ 3

Вы можете использовать SETX в командной строке.

По умолчанию эти действия переходят в пользовательские env vars. Чтобы установить и изменить SYSTEM vars, используйте флаг /M

import os
env_var = "BUILD_NUMBER"
env_val = "3.1.3.3.7"
os.system("SETX {0} {1} /M".format(env_var,env_val))

Ответ 4

Я не верю, что вы можете это сделать; я могу думать о двух рабочих моментах.

  • Функция os.putenv устанавливает среду для процессов, с которых вы начинаете, то есть os.system, popen и т.д. В зависимости от того, что вы пытаетесь сделать, возможно, у вас может быть один мастер-экземпляр Python, который устанавливает переменная, а затем порождает новые экземпляры.

  • Вы можете запустить оболочку script или пакетный файл, чтобы установить ее для вас, но это становится менее переносимым. См. Эту статью:

http://code.activestate.com/recipes/159462/

Ответ 5

В соответствии с это обсуждение, вы не можете этого сделать. Что вы пытаетесь выполнить?

Ответ 6

Подумайте об этом так.

Вы не устанавливаете переменные среды оболочки.

Вы создаете подоболочку с некоторыми настройками переменных среды; эта подоболочка запускает ваше приложение с измененной средой.

Ответ 7

Вы открываете новый процесс и не можете изменить среду родительского процесса, как вы не можете сделать, если вы начнете новый процесс оболочки из оболочки

Ответ 8

Возможно, вы захотите попробовать Python Win32 Extensions, разработанный Марком Хэммондом, который включен в ActivePython (или может быть установлен отдельно). Вы можете узнать, как выполнять многие связанные с Windows задачи в Hammond и Robinson book.

Используя PyWin32 для доступа к COM-объектам Windows, программа Python может использовать Свойство среды (набор переменных окружения) WScript.Shell объект.

Ответ 9

Похоже, что для Windows более простое решение

import subprocess 
subprocess.call(['setx', 'Hello', 'World!'], shell=True)

Ответ 10

Изнутри Python? Нет, это невозможно!

Если вы не связаны с Python, вам следует использовать сценарии оболочки (sh, bash и т.д.). Команда "source" позволяет вам запускать script, который изменяет среду и будет "придерживаться", как вы хотите, чтобы оболочка "вышла" из script. Что здесь происходит, так это то, что оболочка выполняет script прямо, а создавая подпроцесс для выполнения script.

Это будет довольно портативно - вы можете использовать cygwin для Windows.

Ответ 11

В случае, если кому-то может понадобиться эта информация. Я понимаю, что это было спрошено 7 лет назад, но даже я забываю, как иногда..

Да, есть способ заставить их "вставлять" в окна. Просто перейдите на панель управления, систему, расширенные системные настройки, когда откроется окно свойств системы, вы должны увидеть опцию (кнопку) для переменных среды.. Процесс получения этого немного отличается в зависимости от того, какую ОС вы используете (google it).

Выберите это (нажмите кнопку), затем откроется окно "Переменные среды". Он имеет 2 разделенных окна, верхний должен быть вашим "User Variables For yourusername".,.выберите "новый", затем просто установите переменную. Например, один из моих - "Database_Password = mypassword".

Затем в вашем приложении вы можете получить доступ к ним следующим образом: import os, os.environ.get('Database_Password'). Вы можете сделать что-то вроде pass = os.environ.get('Database_Password').