# Змінні оточення { #environment-variables }
/// tip | Порада
Якщо ви вже знаєте, що таке «змінні оточення» і як їх використовувати, можете пропустити цей розділ.
///
Змінна оточення (також відома як «env var») - це змінна, що існує поза кодом Python, в операційній системі, і може бути прочитана вашим кодом Python (а також іншими програмами).
Змінні оточення корисні для роботи з налаштуваннями застосунку, як частина встановлення Python тощо.
## Створення і використання змінних оточення { #create-and-use-env-vars }
Ви можете створювати і використовувати змінні оточення в оболонці (терміналі) без участі Python:
//// tab | Linux, macOS, Windows Bash
```console
// Ви можете створити змінну оточення MY_NAME командою
$ export MY_NAME="Wade Wilson"
// Потім можна використати її з іншими програмами, наприклад
$ echo "Hello $MY_NAME"
Hello Wade Wilson
```
////
//// tab | Windows PowerShell
```console
// Створіть змінну оточення MY_NAME
$ $Env:MY_NAME = "Wade Wilson"
// Використайте її з іншими програмами, наприклад
$ echo "Hello $Env:MY_NAME"
Hello Wade Wilson
```
////
## Читання змінних оточення в Python { #read-env-vars-in-python }
Ви також можете створити змінні оточення поза Python, у терміналі (або будь-яким іншим способом), а потім зчитати їх у Python.
Наприклад, у вас може бути файл `main.py` з:
```Python hl_lines="3"
import os
name = os.getenv("MY_NAME", "World")
print(f"Hello {name} from Python")
```
/// tip | Порада
Другий аргумент до `os.getenv()` - це значення за замовчуванням, яке буде повернено.
Якщо його не вказано, за замовчуванням це `None`. Тут ми надаємо `"World"` як значення за замовчуванням.
///
Потім ви можете запустити цю програму Python:
//// tab | Linux, macOS, Windows Bash
```console
// Тут ми ще не встановлюємо змінну оточення
$ python main.py
// Оскільки ми не встановили змінну оточення, отримуємо значення за замовчуванням
Hello World from Python
// Але якщо спочатку створимо змінну оточення
$ export MY_NAME="Wade Wilson"
// А потім знову викличемо програму
$ python main.py
// Тепер вона може прочитати змінну оточення
Hello Wade Wilson from Python
```
////
//// tab | Windows PowerShell
```console
// Тут ми ще не встановлюємо змінну оточення
$ python main.py
// Оскільки ми не встановили змінну оточення, отримуємо значення за замовчуванням
Hello World from Python
// Але якщо спочатку створимо змінну оточення
$ $Env:MY_NAME = "Wade Wilson"
// А потім знову викличемо програму
$ python main.py
// Тепер вона може прочитати змінну оточення
Hello Wade Wilson from Python
```
////
Оскільки змінні оточення можна встановлювати поза кодом, але читати в коді, і їх не потрібно зберігати (фіксувати у `git`) разом з іншими файлами, їх часто використовують для конфігурацій або налаштувань.
Ви також можете створити змінну оточення лише для конкретного запуску програми, вона буде доступна тільки цій програмі і лише на час її виконання.
Щоб зробити це, створіть її безпосередньо перед командою запуску програми, в тому самому рядку:
```console
// Створіть змінну оточення 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.
///
## Типи і перевірка { #types-and-validation }
Ці змінні оточення можуть містити лише текстові строки, оскільки вони зовнішні щодо Python і мають бути сумісними з іншими програмами та рештою системи (і навіть з різними операційними системами, як-от Linux, Windows, macOS).
Це означає, що будь-яке значення, прочитане в Python зі змінної оточення, буде `str`, а будь-яке перетворення до іншого типу або будь-яка перевірка має виконуватися в коді.
Ви дізнаєтеся більше про використання змінних оточення для роботи з налаштуваннями застосунку в розділі [Просунутий посібник користувача - Налаштування і змінні оточення](./advanced/settings.md){.internal-link target=_blank}.
## Змінна оточення `PATH` { #path-environment-variable }
Є спеціальна змінна оточення `PATH`, яку використовують операційні системи (Linux, macOS, Windows) для пошуку програм для запуску.
Значення змінної `PATH` - це довга строка, що складається з каталогів, розділених двокрапкою `:` у Linux і macOS та крапкою з комою `;` у Windows.
Наприклад, змінна оточення `PATH` може виглядати так:
//// tab | Linux, macOS
```plaintext
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
```
Це означає, що система має шукати програми в каталогах:
* `/usr/local/bin`
* `/usr/bin`
* `/bin`
* `/usr/sbin`
* `/sbin`
////
//// tab | Windows
```plaintext
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` { #installing-python-and-updating-the-path }
Під час встановлення Python вас можуть запитати, чи хочете ви оновити змінну оточення `PATH`.
//// tab | Linux, macOS
Припустімо, ви встановлюєте Python і він опиняється в каталозі `/opt/custompython/bin`.
Якщо ви погодитеся оновити змінну оточення `PATH`, інсталятор додасть `/opt/custompython/bin` до змінної `PATH`.
Це може виглядати так:
```plaintext
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/custompython/bin
```
Тепер, коли ви введете `python` у терміналі, система знайде програму Python у `/opt/custompython/bin` (останній каталог) і використає саме її.
////
//// tab | Windows
Припустімо, ви встановлюєте Python і він опиняється в каталозі `C:\opt\custompython\bin`.
Якщо ви погодитеся оновити змінну оточення `PATH`, інсталятор додасть `C:\opt\custompython\bin` до змінної `PATH`.
```plaintext
C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32;C:\opt\custompython\bin
```
Тепер, коли ви введете `python` у терміналі, система знайде програму Python у `C:\opt\custompython\bin` (останній каталог) і використає саме її.
////
Отже, якщо ви введете:
```console
$ python
```
//// tab | Linux, macOS
Система знайде програму `python` у `/opt/custompython/bin` і запустить її.
Це приблизно еквівалентно введенню:
```console
$ /opt/custompython/bin/python
```
////
//// tab | Windows
Система знайде програму `python` у `C:\opt\custompython\bin\python` і запустить її.
Це приблизно еквівалентно введенню:
```console
$ C:\opt\custompython\bin\python
```
////
Ця інформація стане у пригоді під час вивчення [Віртуальних середовищ](virtual-environments.md){.internal-link target=_blank}.
## Висновок { #conclusion }
Тепер ви маєте базове розуміння того, що таке змінні оточення і як їх використовувати в Python.
Також можна прочитати більше у Вікіпедії про змінну оточення.
У багатьох випадках не одразу очевидно, як змінні оточення будуть корисними та застосовними. Але вони постійно з’являються в різних сценаріях під час розробки, тож варто про них знати.
Наприклад, вам знадобиться ця інформація в наступному розділі про [Віртуальні середовища](virtual-environments.md).