Автор оригинала: Kyriakos Shipillis.
Проблема разработки: Скажем, вы устанавливаете переменную среды, и вы хотите получить доступ к ней в вашем скрипте Python. Как получить значение переменной окружающей среды?
Фон : Переменные среды внешние в среду Python. Они описывают среду операционной системы, которую мы используем.
Установленные приложения используют эту информацию для выполнения определенных задач, таких как хранение временных файлов, доступ к профилю пользователя или нахождение определенных файлов и данных.
Некоторые из этих переменных содержат информацию о конфигурации окружающей среды, например, количество процессоров, установленных, что другие приложения используют для улучшения их производительности. Обычно реестр Windows используется для хранения информации о конфигурации, а приложения доступ к реестру для его получения.
Кроме того, использование переменных среды сводит к минимуму жесткодирование, и, таким образом, приложения более портативны и легче перемещаться на другой сервер или операционную систему.
Python обращается к переменным среды через ОС
Модуль сопоставления класса и словарь, возвращаемый Os.environ
сопоставление объекта.
Сопоставление происходит, когда ОС
Модульные нагрузки. Поэтому любые изменения в переменные среды после ОС
Модульные нагрузки не включены.
Как получить и установить переменные среды в Python?
Os.environ
Предоставляет структуру данных словаря всех переменных среды, установленных для конкретной операционной системы. Следовательно, можно использовать все методы словаря Python для управления словарем и получить необходимую информацию.
Как только модуль OS загружен, создание новой переменной среды и доступа к его значению проста.
import os os.environ['ENV_VAR'] = 'username' # SET environment variable ENV_VAR
Тем не менее, если существует переменная среды, мы перезаписываем ее значение, и, возможно, приложение, использующее его неисправность.
Чтобы убедиться, что мы не перезаписываем существующую переменную, мы можем использовать оператор IF для проверки переменного существования:
If os.environ['ENV_VAR'] == None: os.environ['ENV_VAR'] ='value' else: print("Environment Variable Exists")
Один из способов получить Значение переменной среды состоит в том, чтобы использовать оператор нотации словаря Python, который мы использовали для установки значения переменной: Os.environ [‘env_var’] Возвращает значение, назначенное для
Env_var.
Другой способ – использовать Словарь Получить ()
Способ получения значения переменной среды Os.environ.get ('env_var')
Третий способ получения значения переменной среды является использование Os.environ.SetDefault ()
метод. Этот метод похож на Получить ()
Описанный выше, но требуется два необходимых параметра: имя переменной мы ищем и значение по умолчанию, если переменная не существует.
os.environ.setdefault('ENV_VAR', 'Variable Does not Exist')
Кто-то может спросить, как насчет OS.GETENV ()
метод? Что это делает, и зачем использовать его вместо использования словаря Обозначение
утверждение?
Основная причина в том, что Словарь Метод записи Поднимет исключение, когда переменная не существует, а если не обрабатывает правильно, приложение будет сбой. С другой стороны, OS.GETENV ()
вернется Нет
(поведение по умолчанию), если переменная среды не существует. Мы можем установить значение по умолчанию для чего-то более подходящего, указав дополнительную строку после имени переменной: OS.GETENV («env_vrr», переменная не существует ')
Можно сказать, что OS.GETENV
это улучшенная версия Os.environ.get
с Нет
Значение по умолчанию, где Os.environ.SetDefault
Требуется значение по умолчанию Отказ
Так как мы использовали Генс ()
Чтобы получить значение переменной окружающей среды, мы думаем использовать setenv ()
Чтобы установить новую переменную среды. Мы попробуем команду уверенно, это будет работать:
os.setenv('NewVar', 'VALUE')
Мы получаем сообщение об ошибке вместо этого: Модуль «ОС» не имеет атрибута SETENV.
Мы, вероятно, ошиблись имя; Поэтому мы пытаемся DIR (ОС)
и пройти все методы и атрибуты. Нет setenv ()
метод. Чем ближе вы найдете, это Путенв ()
и мы даем это попробовать: OS.PUTENV («NewVar», «Значение»)
Похоже, это работает; Мы не получаем никаких сообщений об ошибках. Мы запускаем команды, описанные выше, ищете вариабельную созданию, но переменной там нет.
Python Docs Посоветуйте, используя Os.environ
Для создания и назначения значений в переменные среды.
«Назначения предметов в os.environ
автоматически переводятся в соответствующие звонки на putenv ()
; однако звонки на putenv ()
не обновляйте os.environ
, Так что на самом деле предпочтительно назначать предметы OS.environ
». ( https://docs.cython.org/3/Library/os.html )
Итак, какова цель Путенв ()
метод?
__setitem __ ()
Метод использует его для установки значения переменной среды.
def __setitem__(self, key, value): key = self.encodekey(key) value = self.encodevalue(value) putenv(key, value) self._data[key] = value
Мы видим, что когда мы создаем неверное оператор назначения, такое как следующий:
os.environ['ENV_VAR'] ='value' if 'ENV_VAR' not in os.environ else print("Wrong Value")
Как распечатать переменную среды в Python?
Для переменных во всех переменных среды мы можем использовать петлю для цикла:
for var in os.environ: print(var)
Для среды Windows 10, частичный список переменных среды следующий:
AllusersProfile. | ДОРОЖКА | Преданность |
ДАННЫЕ ПРИЛОЖЕНИЯ | ДАННЫЕ ПРОГРАММЫ | ИМЯ ПОЛЬЗОВАТЕЛЯ |
Гомосемя | ПРОГРАММНЫЕ ФАЙЛЫ | ПРОФИЛЬ ПОЛЬЗОВАТЕЛЯ |
Домут | Публичный | Вина |
Эти переменные полезны для настройки, доступа и хранения данных в месте, где пользователь еще имеет доступ даже при роуминге на локальной сети/WAN.
“Для” Заявление только что используется, предоставляет несортированный список всех переменных окружающей среды. Чтобы переменные перечислены в порядке возрастания, мы можем использовать отсортировано ()
Функция:
for var in sorted(os.environ): print(var)
Использование Reverse = True
Поналичите список в по убыванию порядок :
for var in sorted(os.environ, reverse=True):
Примечание: Reverse = false
это значение по умолчанию отсортировано ()
Функция, и нет необходимости указывать ее.
Как насчет получения ценностей каждой переменной? Как отображаться соответствующие значения?
Есть пара способов, которыми мы можем использовать, чтобы получить соответствующие значения. Поскольку Os.environ возвращает словарь, и для
Заявление, которое мы использовали выше, отображает ключ
Из каждой записи в словаре мы можем использовать Словарь Обозначения Чтобы вернуть значение каждого ключа:
for var in sorted(os.environ): print(var, os.environ[v])
или поочередно использовать метод получателя
for var in sorted(os.environ): print(var, os.environ.get(var))
Мы можем использовать знакомые стили форматирования строки, чтобы отобразить список, как нам нравится. Чтобы отобразить список переменных окружающей среды аналогичным образом, отображаемый, когда мы используем Установить
Команда Windows, мы можем использовать F Формат : Печать (F »{var} = {os.environ [var]}")
Это один из способов. Другой способ – использовать Предметы ()
Вместо этого коллекция:
for v, k in os.environ.items(): print(f"{v} = {k}")
Мы также можем преобразовать словарь переменных среды в список кортежей и нарезать его, чтобы получить подмножество переменных среды, например, Первые 10 переменных:
envl=list(os.environ.items()) for v, k in envl[0:10]: print(f"{v} = {k}")
С таким количеством способов получить ключевую пару переменных среды, мы удивляемся, какой из них лучше. Мы верим, что эффективность должна быть основной причиной выбора одного утверждения над другим. Один из способов времени съемки кода – использовать ноутбук Jupyter Magic Magic %% Time
Отказ
Поэтому мы предшествуем трем Для заявлений описано выше с %% Time
, и мы видим, что заявление с использованием Os.environ.Items ()
самый медленный , где два других имеют одинаковое время исполнения.
%%time for v, k in os.environ.items(): print(f"{v} = {k}")
Вышесказанное для петли медленнее на 1 мс. Для этого это не имеет значения, так как он все еще очень быстро. Тем не менее, это то, что нужно помнить, так как звонки на Os.environ
медленнее и дороже, чем локальная библиотека, как мы продемонстрировали.
Как найти свой Python Path?
Одна из переменных окружающей среды, которые, как правило, становятся переполненными и очень длинными, – это путь. Старые версии Windows имели предел 256 символов для переменной среды пути. Ограниченные окна PATH были удалены и с более новыми версиями Windows, длина пути может быть намного дольше. Чтобы прочитать значение переменной пути, которое вы можете использовать Os.environ ['Путь']
или OS.GETENV («Путь»)
Отказ Возвращенная строка будет очень длинным и не так просто читать в обоих случаях. Чтобы получить записи на пути в более полезный формат, нам нужно преобразовать строку Os.environ ['Путь']
в список:
path_list = os.environ['PATH'].split(';') # or path_list = os.getenv('PATH').split(';')
Примечание: Операционная система Windows использует Semicolon (;) в качестве сепаратора пути, где Linux использует толстую кишку (:).
Похоже, мы жесткодируем, верно? Как мы можем избежать жесткокодирования сепаратора от кода выше?
Если мы перечислим все атрибуты и методы ОС
Модуль мы увидим, что есть атрибут сепаратора пути pathsep
Отказ Поэтому вышеуказанный код становится:
path_list = os.environ['PATH'].split(os.pathsep) or path_list = os.getenv('PATH').split(os.pathsep)
Нам больше не нужно беспокоиться о сепараторе больше, и приложение может перемещаться в другую операционную систему с любыми проблемами, связанными с символом сепаратора пути.
Если нам нравится получить путь, где устанавливается Python, мы можем использовать sys.prefix
строка следующим образом:
import sys print(sys.prefix)
sys.prefix
Строка Расскажите нам местоположение установочных файлов Python, иначе известное как путь установки Python.
Осталось ожидать найти переменную среды, такие как Pythonpath со значением, предоставленным sys.prefix
Отказ Тем не менее, переменная PythonPath не существует. Мы можем использовать sys.prefix
Информация для создания переменной среды Pythonpath и получить доступ через Os.environ
Класс экземпляра:
os.environ['PYTHONPATH'] = sys.prefix # Set environment variable os.environ['PYTHONPATH'] # Get the variable value for p in sorted(os.environ): # Verify the os.environ has been updated print(p)
Как удалить переменную среды?
Мы не рекомендуем удалить переменные среды, установленные другими приложениями или операционной системой.
Как насчет того, когда нам нужно удалить приложение, и нам нравится убирать окружающую среду?
В тот момент, когда мы решаем создать переменную среды, мы позволяем другим приложениям использовать его. Поэтому, если мы не уверены, что мы создали переменной окружающей среды, не используются другими приложениями, мы должны избегать удаления IT Отказ
Так как Os.environ
Это словарь со всеми словарами и атрибутами и атрибутами, удаление переменной окружающей среды можно сделать с помощью .pop ()
метод.