Як працює проєктний білдер, ізоляція залежностей і впровадження нових інструментів
Відповіді на питання про ізоляцію Python-проєктів, залежності, `requirements.txt`, перехід із pip на uv та поступове впровадження Playwright поруч із Selenium. Друга половина відео пояснює, коли початківцю корисніше видалити невдалий локальний проєкт і повторити налаштування, а також чому стабільність тестів і зрозумілий фідбек важливіші за складний репортинг.
Після цього уроку ви зможете
Пояснити межу між venv, dependency declaration і lockfile.
Порівняти pip, uv та Poetry через workflows, а не лише швидкість.
Спланувати поступову міграцію Selenium/Playwright без повного переписування.
Мови й екосистеми мають власні package managers або build tools: pip, npm, Maven, Gradle та інші. Вони завантажують бібліотеки з центральних репозиторіїв і можуть кешувати їх локально, але залежності конкретного проєкту визначаються окремо.
Python virtual environment ізолює бібліотеки одного проєкту від іншого. На одному комп’ютері можуть співіснувати робочі й особисті репозиторії з різними версіями Playwright, pytest та інших пакетів.
Конфлікт можливий, якщо запустити код не тим глобальним Python або неправильно вибрати interpreter. Самі залежності коректно створених venv не повинні впливати на сусідні проєкти.
Термін
venv
venv ізолює installed packages від base interpreter, але environment є disposable й зазвичай не переноситься між машинами; його відтворюють із dependency description.
Щоб проєкт можна було клонувати й запустити на іншій машині, його прямі залежності фіксують у конфігурації на кшталт requirements.txt. Бібліотеки самі залежать від інших пакетів — це транзитивні залежності.
Повний freeze може додати до файлу весь граф пакетів. Автор радить не зберігати зайвий шум без потреби: достатньо явно вказати основні залежності, наприклад Playwright і pytest, а їхні сумісні внутрішні пакети підтягнуться автоматично.
Жорстко фіксувати весь граф варто тоді, коли відтворюваність або конфлікти версій справді стали проблемою. Інакше довгий список складніше підтримувати й аналізувати.
Термін
Dependency declaration
requirements.txt описує items to install і може містити як широкі, так і exact specifiers; сам файл не гарантує lock усієї resolution.
pip — базовий і простий інструмент, тоді як uv дає швидше встановлення, сучасніше керування проєктом і зручніші механізми для команд запуску та конфігурації. uv написаний на Rust і особливо помітно скорочує час відновлення залежностей у CI та після клонування репозиторію.
Окрема перевага — робота з конфліктами транзитивних залежностей, коли дві бібліотеки очікують різні версії третьої. uv також дає чіткіший контроль за правилами оновлення й фіксації версій.
Аналогія з Java: Maven виконує базову задачу, Gradle надає ширші можливості й за коректної конфігурації може швидше збирати проєкт. Але переваги нового інструмента треба пов’язувати з реальною проблемою команди, а не лише з його новизною.
Термін
uv.lock
У uv широкі requirements живуть у pyproject.toml, а exact universal resolution — у version-controlled uv.lock.
Переписувати весь test suite з нуля зазвичай не потрібно. Коли старий тест зламався або нову задачу значно легше реалізувати новим засобом, її можна зробити на uv чи Playwright і залишити робочі старі тести на pip або Selenium.
В одному репозиторії тимчасово можуть співіснувати:
- pip і uv; - Maven і Gradle; - Selenium і Playwright; - pytest та інший test runner; - JUnit і TestNG.
CI просто виконує окремі команди для відповідних наборів. Основний ризик — не саме співіснування, а конфлікти спільних транзитивних залежностей і додаткова вартість підтримки двох стеків.
Найбезпечніший аргумент для міграції — конкретна користь на конкретному сценарії: швидше встановлення, простіша діагностика, потрібне мокання network або стабільніша робота з браузером. Після доказу підхід можна розширювати.
Практика
Підготувати план поступової міграції
Оберіть один проблемний Selenium-тест, сформулюйте вимірювану причину перенесення в Playwright, окремі CI-команди та умову, після якої міграцію варто розширювати.
Poetry названо сучаснішим і декларативнішим за pip, хоча uv має перевагу у швидкості та простоті. Однозначної відповіді, з чого починати навчання, немає.
Прості інструменти краще показують базову механіку, а сучасні швидше дають продуктивний результат. Збалансований шлях — працювати сучасним стеком, але паралельно досліджувати, що відбувається під капотом і які проблеми він вирішує.
Розуміння внутрішньої механіки зменшує кількість випадкових workaround і допомагає помічати нові можливості бібліотек замість того, щоб будувати власні обхідні рішення.
Видалення проєкту зі списку Recent у PyCharm прибирає лише запис IDE, а не файли з диска. Щоб повністю почати заново, потрібно закрити проєкт, відкрити його розташування через Finder або Explorer і видалити конкретну папку.
Для навчального проєкту без цінних змін повторне створення інколи дешевше за довгий ланцюг випадкових виправлень. Початківець може вирішити одну помилку порадою з інтернету, створити іншу й настільки відійти від початкової конфігурації, що діагностика стане складнішою. Це не правило для робочих репозиторіїв із незбереженими даними: перед видаленням завжди треба перевірити, що цінних змін немає.
Той самий принцип переноситься на LLM-чат. Якщо перша відповідь повела не туди, варто почати новий контекст із кращим описом середовища, цілі й помилки. Після розв’язання корисно спитати: який початковий prompt одразу дав би достатньо контексту. Так невдалий шлях перетворюється на навчальний матеріал.
У Python-програмі Selenium розглядається, але основний інструмент — Playwright. Головна навичка автоматизатора не прив’язана до API конкретної бібліотеки: потрібно розуміти сторінку й API продукту, будувати тестовані сценарії та домовлятися з розробниками про стабільні селектори й testability.
Playwright надає більше готових можливостей для console, network mocking, traces і компонентних перевірок. У Selenium подібні задачі історично були складнішими, хоча сучасні протоколи браузера розширили його можливості.
TypeScript-версія Playwright має зручний playwright.config, але це не робить інші мови неповноцінними: конфігурацію, паралельність, sharding і репорти можна організувати іншими механізмами. Водночас async/Promise-модель TypeScript іноді додає складності, яка не пов’язана безпосередньо з тестовою задачею.
Що змінилося після запису
Selenium уже має network і console APIs
АктуальноФраза про історично складнішу роботу Selenium з console/network лишається корисним контекстом, але Selenium 4.46 документує WebDriver BiDi domains. Поточна різниця — інтегрованість trace/mocking workflow, а не абсолютна відсутність можливості.
Перевірено 2026-07-31
Термін
WebDriver BiDi
Current Selenium підтримує logging, network і script domains через bidirectional WebDriver APIs; різницю з Playwright коректніше описувати як integrated workflow та ergonomics.
Allure залишається потужним звичним рішенням; Monocart згадується як конкурент. Але складний репортинг не є першою потребою невеликого стабільного suite.
Тест насамперед має бути зрозумілим розробнику й давати швидкий діагностичний сигнал. Якщо падіння стабільне та відтворюване, Playwright trace часто містить достатньо даних без додаткової системи звітів. Traces можна автоматично зберігати лише для невдалих запусків.
Розвинена агрегація стає виправданою при великій кількості тестів, кількох паралельних запусках або потребі бачити історичні тенденції. Якщо ж у suite тисячі UI-тестів, це окремий сигнал перевірити архітектуру покриття, а не лише покращувати звіт.