Перейти к содержанию

Переменные окружения

Tip

Если вы уже знаете, что такое «переменные окружения» и как их использовать, можете пропустить это.

Переменная окружения (также известная как «env var») - это переменная, которая живет вне кода Python, в операционной системе, и может быть прочитана вашим кодом Python (или другими программами).

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

Создание и использование переменных окружения

Можно создавать и использовать переменные окружения в оболочке (терминале), не прибегая к помощи Python:

// Вы можете создать переменную окружения MY_NAME с помощью
$ export MY_NAME="Wade Wilson"

// Затем её можно использовать в других программах, например
$ echo "Hello $MY_NAME"

Hello Wade Wilson
// Создайте переменную окружения MY_NAME
$ $Env:MY_NAME = "Wade Wilson"

// Используйте её с другими программами, например
$ echo "Hello $Env:MY_NAME"

Hello Wade Wilson

Чтение переменных окружения в python

Так же существует возможность создания переменных окружения вне Python, в терминале (или любым другим способом), а затем чтения их в Python.

Например, у вас есть файл main.py:

import os

name = os.getenv("MY_NAME", "World")
print(f"Hello {name} from Python")

Tip

Второй аргумент os.getenv() - это возвращаемое по умолчанию значение.

Если значение не указано, то по умолчанию оно равно None. В данном случае мы указываем «World» в качестве значения по умолчанию.

Затем можно запустить эту программу на Python:

// Здесь мы еще не устанавливаем переменную окружения
$ python main.py

// Поскольку мы не задали переменную окружения, мы получим значение по умолчанию

Hello World from Python

// Но если мы сначала создадим переменную окружения
$ export MY_NAME="Wade Wilson"

// А затем снова запустим программу
$ python main.py

// Теперь она прочитает переменную окружения

Hello Wade Wilson from Python
// Здесь мы еще не устанавливаем переменную окружения
$ python main.py

// Поскольку мы не задали переменную окружения, мы получим значение по умолчанию

Hello World from Python

// Но если мы сначала создадим переменную окружения
$ $Env:MY_NAME = "Wade Wilson"

// А затем снова запустим программу
$ python main.py

// Теперь она может прочитать переменную окружения

Hello Wade Wilson from Python

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

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

Для этого создайте её непосредственно перед самой программой, в той же строке:

// Создайте переменную окружения MY_NAME в строке для этого вызова программы
$ MY_NAME="Wade Wilson" python main.py

// Теперь она может прочитать переменную окружения

Hello Wade Wilson from Python

// После этого переменная окружения больше не существует
$ python main.py

Hello World from Python

Tip

Подробнее об этом можно прочитать на сайте The Twelve-Factor App: Config.

Типизация и Валидация

Эти переменные окружения могут работать только с текстовыми строками, поскольку они являются внешними по отношению к Python и должны быть совместимы с другими программами и остальной системой (и даже с различными операционными системами, такими как Linux, Windows, macOS).

Это означает, что любое значение, считанное в Python из переменной окружения, будет str, и любое преобразование к другому типу или любая проверка должны быть выполнены в коде.

Подробнее об использовании переменных окружения для работы с настройками приложения вы узнаете в Расширенное руководство пользователя - Настройки и переменные среды.

Переменная окружения PATH

Существует специальная переменная окружения PATH, которая используется операционными системами (Linux, macOS, Windows) для поиска программ для запуска.

Значение переменной PATH - это длинная строка, состоящая из каталогов, разделенных двоеточием : в Linux и macOS, и точкой с запятой ; в Windows.

Например, переменная окружения PATH может выглядеть следующим образом:

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

Это означает, что система должна искать программы в каталогах:

  • /usr/local/bin
  • /usr/bin
  • /bin
  • /usr/sbin
  • /sbin
C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32

Это означает, что система должна искать программы в каталогах:

  • C:\Program Files\Python312\Scripts
  • C:\Program Files\Python312
  • C:\Windows\System32

Когда вы вводите команду в терминале, операционная система ищет программу в каждой из тех директорий, которые перечислены в переменной окружения PATH.

Например, когда вы вводите python в терминале, операционная система ищет программу под названием python в первой директории в этом списке.

Если она ее находит, то использует ее. В противном случае она продолжает искать в других каталогах.

Установка Python и обновление PATH

При установке Python вас могут спросить, нужно ли обновить переменную окружения PATH.

Допустим, вы устанавливаете Python, и он оказывается в каталоге /opt/custompython/bin.

Если вы скажете «да», чтобы обновить переменную окружения PATH, то программа установки добавит /opt/custompython/bin в переменную окружения PATH.

Это может выглядеть следующим образом:

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/custompython/bin

Таким образом, когда вы набираете python в терминале, система найдет программу Python в /opt/custompython/bin (последний каталог) и использует ее.

Допустим, вы устанавливаете Python, и он оказывается в каталоге C:\opt\custompython\bin.

Если вы согласитесь обновить переменную окружения PATH, то программа установки добавит C:\opt\custompython\bin в переменную окружения PATH.

C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32;C:\opt\custompython\bin

Таким образом, когда вы набираете python в терминале, система найдет программу Python в C:\opt\custompython\bin (последний каталог) и использует ее.

Итак, если вы напечатаете:

$ python

Система найдет программу python в /opt/custompython/bin и запустит ее.

Это примерно эквивалентно набору текста:

$ /opt/custompython/bin/python

Система найдет программу python в каталоге C:\opt\custompython\bin\python и запустит ее.

Это примерно эквивалентно набору текста:

$ C:\opt\custompython\bin\python

Эта информация будет полезна при изучении Виртуальных окружений.

Вывод

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

Подробнее о них вы также можете прочитать в статье о переменных окружения на википедии.

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

Например, эта информация понадобится вам в следующем разделе, посвященном Виртуальным окружениям.