У попередній темі ми зʼясували, що програма — це список інструкцій, які машина виконує одну за одною, і що Python — зручна мова, щоб такі інструкції записувати. Усе це поки що було на словах. Тепер настає момент, коли треба перестати читати про Python і змусити його працювати на власному компʼютері.
Ця тема — про руки, а не про голову. Ми поставимо інтерпретатор, відкриємо чорне вікно термінала (воно не кусається), напишемо файл із одного рядка, запустимо його — і навмисно зламаємо тричі, щоб навчитися читати повідомлення про помилки. Бо помилки — це не покарання, а звіт про те, що саме пішло не так.
МатчастинаЩо саме ми встановлюємо
Слово «Python» означає дві різні речі, і плутанина між ними — джерело половини непорозумінь.
- Мова — набір правил: як записати число, як назвати змінну, що означає двокрапка в кінці рядка. Правила існують у документі, їх не можна «встановити».
- Інтерпретатор — програма, яка читає текст, написаний за цими правилами, і виконує його. Ось її ми й ставимо.
Аналогія: мова — це граматика української, а інтерпретатор — жива людина, яка вміє читати вголос. Написати текст за правилами мало, потрібен хтось, хто його озвучить.
Офіційний інтерпретатор зветься CPython — саме його завантажують із python.org. Існують інші (PyPy, GraalPy), але коли кажуть «встанови Python», мають на увазі CPython.
Чому версія має значення
Python не стоїть на місці: кожного жовтня виходить нова версія, і в ній зазвичай є новий синтаксис. Правило асиметричне й важливе:
Ми орієнтуємось на Python 3.12 або новіший. Не з примхи: у 3.11 зʼявилися
стрілочки під винним фрагментом у повідомленні про помилку — саме те, що робить навчання
відчутно легшим. У 3.12 дозволили однакові лапки всередині f-рядків (f-рядок — це спосіб
підставити значення прямо в текст, f"Привіт, {imya}!"; докладно —
у темі 05), і зникла ціла категорія
дурних помилок. Посунь повзунок і подивись, що коли зʼявилося:
Що працює в якій версії
Один і той самий код — різні інтерпретатори. Зелене виконається, червоне впаде.
ВстановленняТри системи, три граблі
Далі — конкретні кроки. Обери свою систему в інтерактиві: там і послідовність дій, і головна пастка саме для неї, і команда, якою перевіряють, що вийшло.
Встановлення під твою систему
Кроки відрізняються, перевірка — майже однакова. Обери систему.
перевірка в терміналі
| система | звідки брати | як звати команду | головна грабля |
|---|---|---|---|
| Windows | python.org, інсталятор .exe | python, py | забути галочку «Add to PATH» |
| macOS | python.org або brew | python3 | сплутати свій Python із системним |
| Linux | вже стоїть; або менеджер пакетів | python3 | зламати систему, чіпаючи системний Python |
sudo apt remove python3 знесе разом із ним половину системи. Свій
Python ставиться поруч із системним, а не замість нього.ТерміналЧорне вікно без страху
Термінал (він же командний рядок, консоль) — це вікно, у якому ти пишеш команду текстом, натискаєш Enter, і програма відповідає теж текстом. Оце й усе. Ніякої магії й нічого хакерського: це просто інший спосіб керувати компʼютером — замість «тицьнути мишею в іконку» ти називаєш дію словом.
Усередині цього вікна працює окрема програма — оболонка (shell). Саме
вона читає твій рядок, розуміє, яку програму ти назвав, і запускає її. Термінал — це
вікно, оболонка — той, хто в ньому сидить. Найпоширеніші оболонки: zsh на
macOS, bash на Linux, PowerShell на Windows. Різниця між ними
для нас поки що зводиться до вигляду запрошення; далі в темі слово «оболонка» означатиме
саме цього посередника між тобою й Python.
Чому програмісти ним користуються, хоч мишею наче зручніше? Дві причини. Перша: словами можна описати дію, для якої ніхто не намалював кнопки. Друга: команду можна записати, надіслати колезі й повторити через рік — а послідовність кліків мишею не запишеш.
Як відкрити
- Windows: Win, набери «Terminal» або «PowerShell», Enter.
- macOS: Cmd+Space, набери «Terminal», Enter.
- Linux: Ctrl+Alt+T у більшості середовищ.
Перше, що ти побачиш, — запрошення (prompt): короткий рядок, що закінчується
символом $, % або >. Ліворуч від нього зазвичай написано,
у якій ти теці. Тека (вона ж папка, англійською folder або
directory) — це та сама жовта папка, у яку ти складаєш файли у провіднику: іменована
коробка, у якій лежать файли й інші теки. Термінал бачить ті самі теки, тільки називає їх
текстом. Це не декорація: термінал завжди стоїть у якійсь одній теці, і всі команди
виконуються відносно неї. Ця тека називається поточним каталогом, і плутанина
з нею породжує більшість перших помилок.
Три команди, щоб не загубитися
| команда | розшифровка | що робить |
|---|---|---|
| pwd | print working directory | друкує, у якій ти зараз теці |
| ls | list | показує, що в цій теці лежить (у старому cmd.exe — dir) |
| cd | change directory | перейти в іншу теку; cd .. — на рівень вище |
І дві клавіші, які економлять години: Tab дописує назву файлу чи теки за першими літерами (і заодно доводить, що така назва існує), а ↑ повертає попередню команду, щоб не набирати її знову.
Нижче — тренажер. Це не справжній термінал, а модель: він розуміє обмежений набір команд, зате не зіпсує тобі компʼютер. Спробуй виконати три завдання, які він показує праворуч.
Тренажер термінала
Пиши команду й тисни Enter. Уявна тека користувача olena на macOS.
АдресаШлях: як машина називає місце
Файли живуть у теках, теки лежать у інших теках. Шлях (path) — це маршрут до файлу, записаний рядком. Виглядає він по-різному залежно від системи:
Ліворуч Windows: маршрут починається з літери диска, роздільник — зворотна скісна
\. Праворуч macOS і Linux: маршрут починається з кореня /, роздільник —
звичайна скісна /. Різниця косметична, логіка однакова.
Шляхи бувають двох видів, і це головне, що треба засвоїти:
- Абсолютний — від самого початку:
/home/olena/projects/hello.py. Працює звідки завгодно, бо не залежить від того, де ти стоїш. - Відносний — від поточної теки:
hello.pyозначає «файлhello.pyтут, де я зараз»,projects/hello.py— «зайди вprojectsі візьми там»,../projects/hello.py— «піднімись на рівень вище, потім уprojects».
Через це один і той самий файл запускається різними командами залежно від того, де стоїть термінал. Поклацай по теках у дереві — унизу видно, як змінюється команда:
Де я стою і як звідси запустити файл
Обери теку в дереві. Файл hello.py завжди лежить в одному місці — змінюється тільки команда.
ДіалогREPL: розмова з інтерпретатором
Набери в терміналі python3 і нічого більше. Замість запрошення оболонки зʼявиться
інше — три кутові дужки >>>. Ти потрапив у REPL.
Абревіатура — це цикл із чотирьох дій: Read (прочитати рядок), Eval (обчислити), Print (надрукувати результат), Loop (повторити). Інтерпретатор працює співрозмовником: ти пишеш рядок, він одразу відповідає.
І ось відмінність, яку плутають найчастіше. У REPL значення виразу друкується
саме собою. У файлі — ні. Напиши 2 + 2 у REPL — побачиш 4.
Те саме у файлі не покаже нічого, бо друкувати ти не просив.
Чому так? REPL зроблений для діалогу: безглуздо мовчати, коли в тебе щось спитали. Файл — для роботи: програма, що друкує кожне проміжне значення, була б нестерпною.
І друкують вони по-різному. У кожного обʼєкта в Python є два текстові вигляди:
str — «для людини», і repr (від representation,
«зображення») — «як це виглядало б у коді». Для тексту Оля перший вигляд — це
Оля, а другий — 'Оля', з лапками, бо саме так рядок записують у
програмі. print користується першим, REPL — другим. Тому REPL показує лапки, а
print — ні, і лапки при цьому не є частиною значення. Для числа обидва
вигляди збігаються, тому там ніякої різниці не видно. Перемикай сценарії й дивись:
REPL проти файлу
Ліворуч — той самий код у REPL, праворуч — у файлі. Виводу різна кількість.
REPL · python3
файл · python3 demo.py
ФайлПерший файл і що робить запуск
Тепер найголовніше. Порядок дій такий:
- Створи теку для навчання — хай буде
projectsу домашній теці. - Створи в ній текстовий файл із назвою
hello.py. - Напиши в ньому один рядок і збережи:
- У терміналі перейди в цю теку:
cd projects. - Запусти:
python3 hello.py(на Windows —python hello.py).
На екрані зʼявиться Привіт, світе!. Це твоя перша програма.
Розширення — це хвостик після останньої крапки в назві файлу:
.py у hello.py, .txt у нотатках, .jpg у
світлині. Хвостик .py — не магія. Інтерпретатору байдуже:
python3 будь-що.txt теж чудово виконається. Розширення потрібне
людям і редакторам: за ним редактор впізнає мову й підсвітить синтаксис, а ти з
першого погляду відрізниш код від нотаток.
hello.py просто як «hello» — і тоді неможливо помітити, що блокнот тихо
зберіг його як hello.py.txt. Увімкни в провіднику «Розширення імен файлів»
(вкладка «Вигляд») до того, як створиш перший файл. Це п'ять секунд, які
економлять півгодини на пошуку неіснуючого файлу.Що щойно сталося
Ти написав слово python3. Оболонка не знає, що це, тому йде шукати програму
з такою назвою серед відомих їй тек. Знаходить — і запускає.
Решта рядка — hello.py — передається запущеній програмі як аргумент. Тобто
інтерпретатор стартує з інструкцією «твоє завдання лежить у файлі hello.py».
Інтерпретатор відкриває файл і читає його цілком, перевіряючи, чи все записано за правилами мови. Якщо десь порушено граматику — виконання не почнеться взагалі.
Тільки тепер інструкції виконуються згори вниз. print отримує рядок
і виводить його в термінал.
print — це функція:
готовий шматок коду з іменем, який щось робить, коли його викликати. Викликають
дужками, а те, що стоїть усередині них, — аргумент, тобто дані, які функції
передають. print("Привіт, світе!") читається як «функція print,
візьми цей рядок і надрукуй». Без дужок нічого не станеться: сама назва — це лише посилання
на функцію, а не наказ її виконати. Функцій у Python сотні, кілька з них
(print, len, int) доступні завжди, а решта лежить у
модулях — окремих файлах із кодом, які підключають рядком
import. Свої власні функції ти писатимеш у
темі 15, а модулі розберемо в
темі 17.SyntaxError у останньому рядку файлу не дасть виконатися й
першому — граматику перевіряють до старту. А NameError у десятому рядку
дозволить девʼяти попереднім спрацювати: помилки імені виявляються лише під час виконання.
Побічний ефект: файл, який жодного разу не запускали, може містити скільки завгодно
NameError і виглядати цілком здоровим.ПошукДві різні «не знайдено»
Перші дві помилки, які бачить кожен, схожі на вигляд і абсолютно різні за суттю. Розрізняти їх треба навчитися одразу.
Перша: не знайдено файл
Інтерпретатор знайдено й запущено — він працює й скаржиться. Не знайдено твій файл. Ключ до розгадки в самому повідомленні: там надрукований повний шлях, за яким шукали. Подивись на нього уважно — майже завжди видно, що ти стоїш не в тій теці.
Три типові причини: термінал у сусідній теці; блокнот Windows тихо зберіг файл як
hello.py.txt; одрук у назві. Ліки одні: ls — і одразу видно, чого
насправді бракує.
Друга: не знайдено саму команду
або на Windows:
python : The term 'python' is not recognized as a name of a cmdlet…
Тут ще гірше: оболонка не змогла знайти саму програму. Тобто або Python не встановлений, або встановлений, але оболонка про нього не знає. І щоб зрозуміти чому, треба знати про PATH.
Змінна середовища — це просто іменований рядок тексту, який операційна система віддає кожній програмі, яку запускає. Щось на кшталт записки, яку система вкладає в кишеню кожному, кого відправляє на завдання. Змінних таких десятки; нас цікавить одна, і зветься вона PATH.
PATH — це змінна середовища, у якій записано список тек. Коли ти пишеш
python3, оболонка не обшукує весь диск. Вона проходить теки зі списку по черзі і
бере перший збіг. Саме тому та славнозвісна галочка на Windows зветься
«Add python.exe to PATH» — вона додає теку з Python у цей список.
А ще звідси випливає неочевидне: якщо на компʼютері кілька Python, запуститься не «найновіший», а той, чия тека стоїть у списку раніше. Покрути повзунок і подивись, як змінюється результат:
Куди дивиться оболонка, коли ти пишеш python3
Теки перевіряються згори вниз. Виграє перша, у якій щось знайшлося.
ІнструментРедактор коду
Технічно код можна писати в будь-якому текстовому редакторі — навіть у блокноті. Практично редактор для коду дає чотири речі, і кожна економить конкретні хвилини:
- Підсвітка синтаксису. Забув закрити лапку — увесь текст після неї стає кольором рядка. Помилку видно до запуску, а не після.
- Номери рядків. Traceback називає номер. Без нумерації доводиться рахувати пальцем.
- Автодоповнення. Пишеш
pri— редактор пропонуєprint. Це не лінощі: так не виникає одруків у назвах, а вони — добра половина помилок новачка. - Відступи й кодування. Чотири пробіли замість табуляції, файл у UTF-8. У Python відступ — частина синтаксису, тож це не косметика.
Що взяти: VS Code із розширенням Python або PyCharm Community. Підійде будь-який редактор, у якому є ці чотири речі.
" на типографські
«ялинки», підставляють довге тире замість двох дефісів, додають невидиме форматування. Python
такого не розуміє й видасть SyntaxError на рядку, який виглядає бездоганно.ДіагностикаАнатомія помилки
Коли програма падає, Python друкує traceback — дослівно «слід назад». Виглядає це страшно, але насправді це найдружніша частина мови: у ньому написано, де саме, у якому рядку і що конкретно не так.
Читати його треба з кінця. Останній рядок — це діагноз: тип помилки й пояснення. Рядки вище — це маршрут, яким програма туди дійшла. Якщо функцій ще немає, маршрут складається з одного пункту, і вся інформація вміщується в чотири рядки.
Наведи мишею на будь-яку частину traceback нижче — або натисни на назву частини під ним. Перемикай типи помилок: чотири варіанти внизу — це чотири найчастіші причини падіння.
Розбери traceback на частини
Справжній вивід Python 3.12. Наводь на фрагменти — праворуч зʼявиться пояснення.
| тип | що означає | типова причина |
|---|---|---|
| NameError | імені не існує | одрук у назві або змінну не створили раніше |
| SyntaxError | граматика зламана | незакрита дужка чи лапка, забута двокрапка |
| IndentationError | відступ не на місці | зайвий пробіл або відсутній блок після двокрапки |
| TypeError | дія не підходить типу | додати число до рядка, викликати не функцію |
ОформленняКоментарі й PEP 8
Символ # вимикає для інтерпретатора все, що написано після нього до кінця рядка.
Це коментар — текст для людей.
cina_z_pdv = cina * 1.2
Головне правило коментаря: він пояснює навіщо, а не що. Коментар
# додаємо одиницю до рядка storinka = storinka + 1 — сміття: те саме
написано в коді. А от # +1, бо для людини нумерація сторінок починається з одиниці —
корисно, бо цього в коді не видно.
Друге застосування — тимчасово вимкнути рядок, не видаляючи його. Зручно, коли перевіряєш, чи саме він ламає програму.
PEP 8 у двох реченнях
PEP 8 — це офіційна угода спільноти про те, як має виглядати код на Python:
чотири пробіли на відступ, пробіли навколо = та знаків дій, імена змінних
малими_літерами_з_підкресленнями, порожній рядок між логічними частинами.
Дотримуються її не тому, що інакше не запуститься — запуститься, — а тому що весь світ читає
код очима, натренованими на цей вигляд, і чужий код у звичному оформленні розуміється вдвічі
швидше.
black чи
ruff format приведуть файл до канону однією командою. Твоя робота — думати над
іменами, а не рахувати пробіли.ГлибшеДля тих, хто вже писав код
Далі — речі, які новачку поки не потрібні, але заощадять багато часу тому, хто вже щось умів у інших мовах.
Чому python3 -m, а не просто назва утиліти
Прапорець -m каже: «знайди модуль із такою назвою й виконай його як програму».
Головна перевага в тому, що модуль виконується тим самим інтерпретатором, який
ти щойно назвав. Порівняй:
↑ який саме pip? той, що трапиться першим у PATH
python3 -m pip install requests
↑ рівно той pip, що належить цьому python3
У системі майже завжди кілька Python, а отже кілька pip. Класична загадка «я
встановив пакет, а імпорт не працює» — це пакет, що ліг в один інтерпретатор, а потрібен
іншому. Форма python3 -m pip знімає питання назавжди. Так само корисні
python3 -m venv .venv, python3 -m json.tool file.json
і python3 -m http.server.
python проти python3
Історична спадщина. Поки жив Python 2, слово python означало саме його, а
python3 — нову гілку. Домовленість (PEP 394) така: python3 завжди
вказує на третю версію, а python може взагалі не існувати — і на свіжих Linux та
macOS його часто нема. Пиши python3 і не гадай.
Два винятки. Всередині активованого віртуального середовища python існує й
вказує саме на потрібний інтерпретатор — там коротка форма безпечна. А на Windows офіційний
інсталятор ставить ще й лаунчер py, який уміє вибирати версію:
py -3.12 script.py запустить саме 3.12, навіть якщо в системі стоять три Python.
Як не поламати системний Python
Спокуса поставити пакет «просто в систему» через sudo pip install закінчується
однаково: pip перезаписує версію бібліотеки, від якої залежить менеджер пакетів ОС, і той
перестає працювати. Тому з Python 3.11 діє PEP 668: інтерпретатори з дистрибутивів позначені як
externally managed, і pip сам відмовляється туди щось ставити. Це захист, а не
перешкода — обходити його прапорцем --break-system-packages варто хіба що з повним
розумінням наслідків (назву прапорця обрали не випадково).
Правильне місце для пакетів — віртуальне середовище (venv):
окрема тека в проєкті з власним набором бібліотек і власним посиланням на інтерпретатор. Один
проєкт — одне середовище, і залежності не конфліктують. Створюється однією командою
python3 -m venv .venv, а докладно розберемо це в
темі 18 «Віртуальні середовища і pip».
python3 -i hello.py виконає файл і
залишить тебе в REPL з усіма змінними, які програма встигла створити. Найдешевший спосіб
подивитися, що всередині, коли щось пішло не так, — дешевший за розстановку print
по всьому файлу.ПідсумокЩо ми тепер уміємо
Формально — вивели один рядок тексту. Насправді зібрали робоче місце й закрили той барʼєр, на якому зупиняється більшість:
- інтерпретатор — окрема програма, яку треба поставити, і версія якої має значення;
- термінал — спосіб називати дії словами, з поточною текою й трьома командами;
- шлях — відносний від того, де ти стоїш, або абсолютний від кореня;
- REPL і файл — діалог проти роботи, і різна поведінка з виводом;
- PATH — чому запускається не той Python, який ти щойно поставив;
- traceback — звіт, який читають з кінця, а не привід засмучуватися.
А тепер про наступний крок. Наша програма нічого не памʼятає: надрукувала рядок і забула його назавжди. Щоб робити щось складніше, значення треба вміти зберігати — давати їм імена й повертатися до них пізніше. Здається, тема на пʼять хвилин. Насправді саме тут ховається одна з найважливіших ідей Python: імʼя — це не коробка зі значенням, а ярлик, наклеєний на обʼєкт. Різниця між цими двома картинками пояснює половину дивної поведінки, з якою ти зіткнешся пізніше.