Можно ли установить переменную окружения из Python навсегда?
С помощью os
Модуль я могу получить значения переменных среды. Например:
os.environ['HOME']
Однако я не могу установить переменные среды:
os.environ['BLA'] = "FOO"
Это работает в текущем сеансе программы, но когда я завершаю программу Python, я не вижу, чтобы она изменила (или установила) значения переменных среды. Есть ли способ сделать это из Python?
6 ответов
Если вы хотите, чтобы переменные окружения сохранялись во время сеансов, вы можете
Для unix
делать то, что мы делаем, когда в bash
ракушка. Добавить переменные среды внутри ~/.bashrc
,
import os
with open(os.path.expanduser("~/.bashrc"), "a") as outfile:
# 'a' stands for "append"
outfile.write("export MYVAR=MYVALUE")
или для Windows:
setx /M MYVAR "MYVALUE"
в *.bat
то есть в автозагрузке в программных файлах
если вы хотите сделать это и установить их навсегда в учетную запись пользователя, вы можете использовать setx, но если вы хотите использовать как глобальный, вы можете использовать setx /M, но для этого вам может потребоваться повышение (я использую окна в качестве примера (для linux вы можете использовать экспорт )
import subprocess
if os.name == 'posix': # if is in linux
exp = 'export hi2="youAsWell"'
if os.name == 'nt': # if is in windows
exp = 'setx hi2 "youAsWell"'
subprocess.Popen(exp, shell=True).wait()
после запуска вы можете перейти к средам и посмотреть, как они были добавлены в мои пользовательские среды
Ответ @rantanplan правильный. Однако для Unix , если вы хотите установить несколько переменных среды, я предлагаю вам добавить
\n
в конце
outfile
строка следующим образом:
outfile.write("export MYVAR=MYVALUE\n")
Итак, код выглядит следующим образом:
import os
with open(os.path.expanduser("~/.bashrc"), "a") as outfile:
# 'a' stands for "append"
outfile.write("export MYVAR1=MYVALUE1\n")
outfile.write("export MYVAR2=MYVALUE2\n")
Это предотвратит добавление слова «экспорт» в конце значения переменной среды.
Я не уверен. Вы можете вернуть переменную и установить ее таким образом. Для этого распечатайте его.
(программа на питоне)
...
print foo
(Баш)
set -- $(python test.py)
foo=$1
вы можете использовать py-setenv для выполнения этой работы. Он получит доступ к реестру Windows и внесет изменения за вас, установит через
python -m pip install py-setenv
Хорошим решением для людей, желающих применить это решение для Windows, может быть следующее:
Для конкретного пользователя,
from os import path
with open(path.join(path.expanduser('~'),"AppData","Roaming","Microsoft","Windows"
,"Start Menu","Programs","Startup","script.ps1"), 'w') as fp:
fp.write('[Environment]::SetEnvironmentVariable("THIS_IS_NAME", "THIS_IS_VALUE", "User") ')
Обратитесь к команде , которая выполняется для заданной среды. ликбез, если есть опечатки ;)