У попередній темі ми з'ясували, що програма — це список інструкцій, які машина виконує одну за одною, і що Python — зручна мова, щоб такі інструкції записувати. Усе це поки що було на словах. Тепер настає момент, коли треба перестати читати про Python і змусити його працювати на власному комп'ютері.
Ця тема — про руки, а не про голову. Ми поставимо інтерпретатор, відкриємо чорне вікно термінала (воно не кусається), напишемо файл із одного рядка, запустимо його — і навмисно зламаємо тричі, щоб навчитися читати повідомлення про помилки. Бо помилки — це не покарання, а звіт про те, що саме пішло не так.
01 / МатчастинаЩо саме ми встановлюємо
Слово «Python» означає дві різні речі, і плутанина між ними — джерело половини непорозумінь.
- Мова — набір правил: як записати число, як назвати змінну, що означає двокрапка в кінці рядка. Правила існують у документі, їх не можна «встановити».
- Інтерпретатор — програма, яка читає текст, написаний за цими правилами, і виконує його. Ось її ми й ставимо.
Аналогія: мова — це граматика української, а інтерпретатор — жива людина, яка вміє читати вголос. Написати текст за правилами мало, потрібен хтось, хто його озвучить.
Офіційний інтерпретатор зветься CPython — саме його завантажують із python.org. Існують інші (PyPy, GraalPy), але коли кажуть «встанови Python», мають на увазі CPython.
Чому версія має значення
Python не стоїть на місці: кожного жовтня виходить нова версія, і в ній зазвичай є новий синтаксис. Правило асиметричне й важливе:
Ми орієнтуємось на Python 3.12 або новіший. Не з примхи: у 3.11 з'явилися стрілочки під винним фрагментом у повідомленні про помилку — саме те, що робить навчання відчутно легшим. У 3.12 дозволили однакові лапки всередині f-рядків, і зникла ціла категорія дурних помилок. Посунь повзунок і подивись, що коли з'явилося:
Інтерактив 1 · Що працює в якій версії
Один і той самий код — різні інтерпретатори. Зелене виконається, червоне впаде.
02 / ВстановленняТри системи, три граблі
Далі — конкретні кроки. Обери свою систему в інтерактиві: там і послідовність дій, і головна пастка саме для неї, і команда, якою перевіряють, що вийшло.
Інтерактив 2 · Встановлення під твою систему
Кроки відрізняються, перевірка — майже однакова. Обери систему.
перевірка в терміналі
| система | звідки брати | як звати команду | головна грабля |
|---|---|---|---|
| Windows | python.org, інсталятор .exe | python, py | забути галочку «Add to PATH» |
| macOS | python.org або brew | python3 | сплутати свій Python із системним |
| Linux | вже стоїть; або менеджер пакетів | python3 | зламати систему, чіпаючи системний Python |
sudo apt remove python3 знесе разом із ним половину системи. Свій
Python ставиться поруч із системним, а не замість нього.03 / ТерміналЧорне вікно без страху
Термінал (він же командний рядок, консоль, shell) — це вікно, у якому ти пишеш команду текстом, натискаєш Enter, і програма відповідає теж текстом. Оце й усе. Ніякої магії й нічого хакерського: це просто інший спосіб керувати комп'ютером — замість «тицьнути мишею в іконку» ти називаєш дію словом.
Чому програмісти ним користуються, хоч мишею наче зручніше? Дві причини. Перша: словами можна описати дію, для якої ніхто не намалював кнопки. Друга: команду можна записати, надіслати колезі й повторити через рік — а послідовність кліків мишею не запишеш.
Як відкрити
- Windows: Win, набери «Terminal» або «PowerShell», Enter.
- macOS: Cmd+Space, набери «Terminal», Enter.
- Linux: Ctrl+Alt+T у більшості середовищ.
Перше, що ти побачиш, — запрошення (prompt): короткий рядок, що закінчується
символом $, % або >. Ліворуч від нього зазвичай написано,
у якій ти теці. Це не декорація: термінал завжди стоїть у якійсь одній теці, і всі команди
виконуються відносно неї. Ця тека називається поточним каталогом, і плутанина
з нею породжує більшість перших помилок.
Три команди, щоб не загубитися
| команда | розшифровка | що робить |
|---|---|---|
| pwd | print working directory | друкує, у якій ти зараз теці |
| ls | list | показує, що в цій теці лежить (у старому cmd.exe — dir) |
| cd | change directory | перейти в іншу теку; cd .. — на рівень вище |
І дві клавіші, які економлять години: Tab дописує назву файлу чи теки за першими літерами (і заодно доводить, що така назва існує), а ↑ повертає попередню команду, щоб не набирати її знову.
Нижче — тренажер. Це не справжній термінал, а модель: він розуміє обмежений набір команд, зате не зіпсує тобі комп'ютер. Спробуй виконати три завдання, які він показує праворуч.
Інтерактив 3 · Тренажер термінала
Пиши команду й тисни Enter. Уявна тека користувача olena на macOS.
04 / АдресаШлях: як машина називає місце
Файли живуть у теках, теки лежать у інших теках. Шлях (path) — це маршрут до файлу, записаний рядком. Виглядає він по-різному залежно від системи:
Ліворуч Windows: маршрут починається з літери диска, роздільник — зворотна скісна
\. Праворуч macOS і Linux: маршрут починається з кореня /, роздільник —
звичайна скісна /. Різниця косметична, логіка однакова.
Шляхи бувають двох видів, і це головне, що треба засвоїти:
- Абсолютний — від самого початку:
/home/olena/projects/hello.py. Працює звідки завгодно, бо не залежить від того, де ти стоїш. - Відносний — від поточної теки:
hello.pyозначає «файлhello.pyтут, де я зараз»,projects/hello.py— «зайди вprojectsі візьми там»,../projects/hello.py— «піднімись на рівень вище, потім уprojects».
Через це один і той самий файл запускається різними командами залежно від того, де стоїть термінал. Поклацай по теках у дереві — унизу видно, як змінюється команда:
Інтерактив 4 · Де я стою і як звідси запустити файл
Обери теку в дереві. Файл hello.py завжди лежить в одному місці — змінюється тільки команда.
05 / ДіалогREPL: розмова з інтерпретатором
Набери в терміналі python3 і нічого більше. Замість запрошення оболонки з'явиться
інше — три кутові дужки >>>. Ти потрапив у REPL.
Абревіатура — це цикл із чотирьох дій: Read (прочитати рядок), Eval (обчислити), Print (надрукувати результат), Loop (повторити). Інтерпретатор працює співрозмовником: ти пишеш рядок, він одразу відповідає.
І ось відмінність, яку плутають найчастіше. У REPL значення виразу друкується
саме собою. У файлі — ні. Напиши 2 + 2 у REPL — побачиш 4.
Те саме у файлі не покаже нічого, бо друкувати ти не просив.
Чому так? REPL зроблений для діалогу: безглуздо мовчати, коли в тебе щось спитали. Файл — для роботи: програма, що друкує кожне проміжне значення, була б нестерпною. Перемикай сценарії й дивись на різницю:
Інтерактив 5 · REPL проти файлу
Ліворуч — той самий код у REPL, праворуч — у файлі. Виводу різна кількість.
REPL · python3
файл · python3 demo.py
06 / ФайлПерший файл і що робить запуск
Тепер найголовніше. Порядок дій такий:
- Створи теку для навчання — хай буде
projectsу домашній теці. - Створи в ній текстовий файл із назвою
hello.py. - Напиши в ньому один рядок і збережи:
- У терміналі перейди в цю теку:
cd projects. - Запусти:
python3 hello.py(на Windows —python hello.py).
На екрані з'явиться Привіт, світе!. Це твоя перша програма.
Розширення .py — не магія. Інтерпретатору байдуже: python3 будь-що.txt
теж чудово виконається. Розширення потрібне людям і редакторам: за ним редактор впізнає
мову й підсвітить синтаксис, а ти з першого погляду відрізниш код від нотаток.
Що щойно сталося
Ти написав слово python3. Оболонка не знає, що це, тому йде шукати програму
з такою назвою серед відомих їй тек. Знаходить — і запускає.
Решта рядка — hello.py — передається запущеній програмі як аргумент. Тобто
інтерпретатор стартує з інструкцією «твоє завдання лежить у файлі hello.py».
Інтерпретатор відкриває файл і читає його цілком, перевіряючи, чи все записано за правилами мови. Якщо десь порушено граматику — виконання не почнеться взагалі.
Тільки тепер інструкції виконуються згори вниз. print отримує рядок
і виводить його в термінал.
SyntaxError у останньому рядку файлу не дасть виконатися й
першому — граматику перевіряють до старту. А NameError у десятому рядку
дозволить дев'яти попереднім спрацювати: помилки імені виявляються лише під час виконання.
Побічний ефект: файл, який жодного разу не запускали, може містити скільки завгодно
NameError і виглядати цілком здоровим.07 / ПошукДві різні «не знайдено»
Перші дві помилки, які бачить кожен, схожі на вигляд і абсолютно різні за суттю. Розрізняти їх треба навчитися одразу.
Перша: не знайдено файл
Інтерпретатор знайдено й запущено — він працює й скаржиться. Не знайдено твій файл. Ключ до розгадки в самому повідомленні: там надрукований повний шлях, за яким шукали. Подивись на нього уважно — майже завжди видно, що ти стоїш не в тій теці.
Три типові причини: термінал у сусідній теці; блокнот Windows тихо зберіг файл як
hello.py.txt; одрук у назві. Ліки одні: ls — і одразу видно, чого
насправді бракує.
Друга: не знайдено саму команду
або на Windows:
python : The term 'python' is not recognized as a name of a cmdlet…
Тут ще гірше: оболонка не змогла знайти саму програму. Тобто або Python не встановлений, або встановлений, але оболонка про нього не знає. І щоб зрозуміти чому, треба знати про PATH.
PATH — це змінна середовища, у якій записано список тек. Коли ти пишеш
python3, оболонка не обшукує весь диск. Вона проходить теки зі списку по черзі і
бере перший збіг. Саме тому та славнозвісна галочка на Windows зветься
«Add python.exe to PATH» — вона додає теку з Python у цей список.
А ще звідси випливає неочевидне: якщо на комп'ютері кілька Python, запуститься не «найновіший», а той, чия тека стоїть у списку раніше. Покрути повзунок і подивись, як змінюється результат:
Інтерактив 6 · Куди дивиться оболонка, коли ти пишеш python3
Теки перевіряються згори вниз. Виграє перша, у якій щось знайшлося.
08 / ІнструментРедактор коду
Технічно код можна писати в будь-якому текстовому редакторі — навіть у блокноті. Практично редактор для коду дає чотири речі, і кожна економить конкретні хвилини:
- Підсвітка синтаксису. Забув закрити лапку — увесь текст після неї стає кольором рядка. Помилку видно до запуску, а не після.
- Номери рядків. Traceback називає номер. Без нумерації доводиться рахувати пальцем.
- Автодоповнення. Пишеш
pri— редактор пропонуєprint. Це не лінощі: так не виникає одруків у назвах, а вони — добра половина помилок новачка. - Відступи й кодування. Чотири пробіли замість табуляції, файл у UTF-8. У Python відступ — частина синтаксису, тож це не косметика.
Що взяти: VS Code із розширенням Python або PyCharm Community. Підійде будь-який редактор, у якому є ці чотири речі.
" на типографські
«ялинки», підставляють довге тире замість двох дефісів, додають невидиме форматування. Python
такого не розуміє й видасть SyntaxError на рядку, який виглядає бездоганно.09 / ДіагностикаАнатомія помилки
Коли програма падає, Python друкує traceback — дослівно «слід назад». Виглядає це страшно, але насправді це найдружніша частина мови: у ньому написано, де саме, у якому рядку і що конкретно не так.
Читати його треба з кінця. Останній рядок — це діагноз: тип помилки й пояснення. Рядки вище — це маршрут, яким програма туди дійшла. Якщо функцій ще немає, маршрут складається з одного пункту, і вся інформація вміщується в чотири рядки.
Наведи мишею на будь-яку частину traceback нижче — або натисни на назву частини під ним. Перемикай типи помилок: чотири варіанти внизу — це чотири найчастіші причини падіння.
Інтерактив 7 · Розбери traceback на частини
Справжній вивід Python 3.12. Наводь на фрагменти — праворуч з'явиться пояснення.
| тип | що означає | типова причина |
|---|---|---|
| NameError | імені не існує | одрук у назві або змінну не створили раніше |
| SyntaxError | граматика зламана | незакрита дужка чи лапка, забута двокрапка |
| IndentationError | відступ не на місці | зайвий пробіл або відсутній блок після двокрапки |
| TypeError | дія не підходить типу | додати число до рядка, викликати не функцію |
10 / ОформленняКоментарі й PEP 8
Символ # вимикає для інтерпретатора все, що написано після нього до кінця рядка.
Це коментар — текст для людей.
cina_z_pdv = cina * 1.2
Головне правило коментаря: він пояснює навіщо, а не що. Коментар
# додаємо одиницю до рядка storinka = storinka + 1 — сміття: те саме
написано в коді. А от # +1, бо для людини нумерація сторінок починається з одиниці —
корисно, бо цього в коді не видно.
Друге застосування — тимчасово вимкнути рядок, не видаляючи його. Зручно, коли перевіряєш, чи саме він ламає програму.
PEP 8 у двох реченнях
PEP 8 — це офіційна угода спільноти про те, як має виглядати код на Python:
чотири пробіли на відступ, пробіли навколо = та знаків дій, імена змінних
малими_літерами_з_підкресленнями, порожній рядок між логічними частинами.
Дотримуються її не тому, що інакше не запуститься — запуститься, — а тому що весь світ читає
код очима, натренованими на цей вигляд, і чужий код у звичному оформленні розуміється вдвічі
швидше.
black чи
ruff format приведуть файл до канону однією командою. Твоя робота — думати над
іменами, а не рахувати пробіли.11 / ГлибшеДля тих, хто вже писав код
Далі — речі, які новачку поки не потрібні, але заощадять багато часу тому, хто вже щось умів у інших мовах.
Чому 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, а докладно розберемо це в темі 17
«Віртуальні середовища і pip».
python3 -i hello.py виконає файл і
залишить тебе в REPL з усіма змінними, які програма встигла створити. Найдешевший спосіб
подивитися, що всередині, коли щось пішло не так, — дешевший за розстановку print
по всьому файлу.12 / ПідсумокЩо ми тепер уміємо
Формально — вивели один рядок тексту. Насправді зібрали робоче місце й закрили той бар'єр, на якому зупиняється більшість:
- інтерпретатор — окрема програма, яку треба поставити, і версія якої має значення;
- термінал — спосіб називати дії словами, з поточною текою й трьома командами;
- шлях — відносний від того, де ти стоїш, або абсолютний від кореня;
- REPL і файл — діалог проти роботи, і різна поведінка з виводом;
- PATH — чому запускається не той Python, який ти щойно поставив;
- traceback — звіт, який читають з кінця, а не привід засмучуватися.
А тепер про наступний крок. Наша програма нічого не пам'ятає: надрукувала рядок і забула його назавжди. Щоб робити щось складніше, значення треба вміти зберігати — давати їм імена й повертатися до них пізніше. Здається, тема на п'ять хвилин. Насправді саме тут ховається одна з найважливіших ідей Python: ім'я — це не коробка зі значенням, а ярлик, наклеєний на об'єкт. Різниця між цими двома картинками пояснює половину дивної поведінки, з якою ти зіткнешся пізніше.
practice.ipynb ти зробиш перший файл,
запустиш його програмно, а потім навмисно зламаєш тричі — і розбереш кожен traceback по частинах,
щоб діагноз ставився за секунди, а не за пів години.Далі в темі
Теорію прочитано. Тепер закріпи її на практиці.