From 035d5e0e2457597f9603f7249b44c46dd89211f1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 1 Jul 2026 06:44:10 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=8C=90=20Update=20translations=20for=20uk?= =?UTF-8?q?=20(update-outdated)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/uk/docs/_llm-test.md | 4 +- docs/uk/docs/alternatives.md | 32 ++++---- docs/uk/docs/async.md | 46 +++++------ docs/uk/docs/environment-variables.md | 32 ++++---- docs/uk/docs/features.md | 42 +++++----- docs/uk/docs/index.md | 52 ++++++------- docs/uk/docs/python-types.md | 42 +++++----- docs/uk/docs/virtual-environments.md | 108 +++++++++++++------------- 8 files changed, 180 insertions(+), 178 deletions(-) diff --git a/docs/uk/docs/_llm-test.md b/docs/uk/docs/_llm-test.md index 22c5bc436..7de364bbd 100644 --- a/docs/uk/docs/_llm-test.md +++ b/docs/uk/docs/_llm-test.md @@ -203,9 +203,9 @@ works(foo="bar") # Це працює 🎉 //// tab | Інформація -Атрибути "title" елементів "abbr" перекладаються за певними інструкціями. +Атрибути «title» елементів «abbr» перекладаються за певними інструкціями. -Переклади можуть додавати власні елементи "abbr", які LLM не повинен прибирати. Наприклад, щоб пояснити англійські слова. +Переклади можуть додавати власні елементи «abbr», які LLM не повинен прибирати. Наприклад, щоб пояснити англійські слова. Див. розділ `### HTML abbr elements` в загальній підсказці в `scripts/translate.py`. diff --git a/docs/uk/docs/alternatives.md b/docs/uk/docs/alternatives.md index 155c727df..f903f3f20 100644 --- a/docs/uk/docs/alternatives.md +++ b/docs/uk/docs/alternatives.md @@ -44,11 +44,11 @@ Django REST Framework створив Том Крісті. Той самий тв ### [Flask](https://flask.palletsprojects.com) { #flask } -Flask — це «мікрофреймворк», він не включає інтеграцію бази даних, а також багато речей, які за замовчуванням є в Django. +Flask - це «мікрофреймворк», він не включає інтеграцію бази даних, а також багато речей, які за замовчуванням є в Django. Ця простота та гнучкість дозволяють використовувати бази даних NoSQL як основну систему зберігання даних. -Оскільки він дуже простий, він порівняно легкий та інтуїтивний для освоєння, хоча в деяких моментах документація стає дещо технічною. +Оскільки він дуже простий, він порівняно інтуїтивний для освоєння, хоча в деяких моментах документація стає дещо технічною. Він також зазвичай використовується для інших програм, яким не обов’язково потрібна база даних, керування користувачами або будь-яка з багатьох функцій, які є попередньо вбудованими в Django. Хоча багато з цих функцій можна додати за допомогою плагінів. @@ -72,7 +72,7 @@ Flask — це «мікрофреймворк», він не включає ін Але все ж FastAPI черпав натхнення з Requests. -**Requests** — це бібліотека для *взаємодії* з API (як клієнт), а **FastAPI** — це бібліотека для *створення* API (як сервер). +**Requests** - це бібліотека для *взаємодії* з API (як клієнт), а **FastAPI** - це бібліотека для *створення* API (як сервер). Вони більш-менш знаходяться на протилежних кінцях, доповнюючи одна одну. @@ -88,7 +88,7 @@ Requests мають дуже простий та інтуїтивно зрозу response = requests.get("http://example.com/some/url") ``` -Відповідна операція шляху API FastAPI може виглядати так: +Відповідна *операція шляху* API FastAPI може виглядати так: ```Python hl_lines="1" @app.get("/some/url") @@ -124,7 +124,7 @@ def read_url(): Інтегрувати інструменти інтерфейсу на основі стандартів: -* [Інтерфейс Swagger](https://github.com/swagger-api/swagger-ui) +* [Swagger UI](https://github.com/swagger-api/swagger-ui) * [ReDoc](https://github.com/Rebilly/ReDoc) Ці два було обрано через те, що вони досить популярні та стабільні, але, виконавши швидкий пошук, ви можете знайти десятки додаткових альтернативних інтерфейсів для OpenAPI (які можна використовувати з **FastAPI**). @@ -157,7 +157,7 @@ Marshmallow створено для забезпечення цих функці Іншою важливою функцією, необхідною для API, є аналіз даних із вхідних запитів. -Webargs — це інструмент, створений, щоб забезпечити це поверх кількох фреймворків, включаючи Flask. +Webargs - це інструмент, створений, щоб забезпечити це поверх кількох фреймворків, включаючи Flask. Він використовує Marshmallow в основі для перевірки даних. І створений тими ж розробниками. @@ -239,7 +239,7 @@ Flask-apispec був створений тими ж розробниками Mar ### [NestJS](https://nestjs.com/) (та [Angular](https://angular.io/)) { #nestjs-and-angular } -Це навіть не Python, NestJS — це фреймворк NodeJS JavaScript (TypeScript), натхненний Angular. +Це навіть не Python, NestJS - це фреймворк NodeJS JavaScript (TypeScript), натхненний Angular. Це досягає чогось подібного до того, що можна зробити з Flask-apispec. @@ -281,7 +281,7 @@ Flask-apispec був створений тими ж розробниками Mar ### [Falcon](https://falconframework.org/) { #falcon } -Falcon — ще один високопродуктивний фреймворк Python, він розроблений як мінімальний і працює як основа інших фреймворків, таких як Hug. +Falcon - ще один високопродуктивний фреймворк Python, він розроблений як мінімальний і працює як основа інших фреймворків, таких як Hug. Він розроблений таким чином, щоб мати функції, які отримують два параметри, один «запит» і один «відповідь». Потім ви «читаєте» частини запиту та «записуєте» частини у відповідь. Через такий дизайн неможливо оголосити параметри запиту та тіла за допомогою стандартних підказок типу Python як параметри функції. @@ -351,7 +351,7 @@ Hug надихнув **FastAPI** оголосити параметр `response` /// -### [APIStar](https://github.com/encode/apistar) (<= 0,5) { #apistar-0-5 } +### [APIStar](https://github.com/encode/apistar) (<= 0.5) { #apistar-0-5 } Безпосередньо перед тим, як вирішити створити **FastAPI**, я знайшов сервер **APIStar**. Він мав майже все, що я шукав, і мав чудовий дизайн. @@ -373,7 +373,7 @@ Hug надихнув **FastAPI** оголосити параметр `response` Це вже не був веб-фреймворк API, оскільки творцю потрібно було зосередитися на Starlette. -Тепер APIStar — це набір інструментів для перевірки специфікацій OpenAPI, а не веб-фреймворк. +Тепер APIStar - це набір інструментів для перевірки специфікацій OpenAPI, а не веб-фреймворк. /// note | Примітка @@ -403,7 +403,7 @@ APIStar створив Том Крісті. Той самий хлопець, я ### [Pydantic](https://docs.pydantic.dev/) { #pydantic } -Pydantic — це бібліотека для визначення перевірки даних, серіалізації та документації (за допомогою Схеми JSON) на основі підказок типу Python. +Pydantic - це бібліотека для визначення перевірки даних, серіалізації та документації (за допомогою Схеми JSON) на основі підказок типу Python. Це робить його надзвичайно інтуїтивним. @@ -419,7 +419,7 @@ Pydantic — це бібліотека для визначення переві ### [Starlette](https://www.starlette.dev/) { #starlette } -Starlette — це легкий фреймворк/набір інструментів ASGI, який ідеально підходить для створення високопродуктивних asyncio сервісів. +Starlette - це легкий фреймворк/набір інструментів ASGI, який ідеально підходить для створення високопродуктивних asyncio сервісів. Він дуже простий та інтуїтивно зрозумілий. Його розроблено таким чином, щоб його можна було легко розширювати та мати модульні компоненти. @@ -433,7 +433,7 @@ Starlette — це легкий фреймворк/набір інструмен * CORS, GZip, статичні файли, потокові відповіді. * Підтримку сеансів і кукі. * 100% покриття тестом. -* 100% анотовану кодову базу. +* 100% анотовану типами кодову базу. * Кілька жорстких залежностей. Starlette наразі є найшвидшим фреймворком Python із перевірених. Перевершує лише Uvicorn, який є не фреймворком, а сервером. @@ -446,7 +446,7 @@ Starlette надає всі основні функції веб-мікрофр /// note | Технічні деталі -ASGI — це новий «стандарт», який розробляється членами основної команди Django. Це ще не «стандарт Python» (PEP), хоча вони в процесі цього. +ASGI - це новий «стандарт», який розробляється членами основної команди Django. Це ще не «стандарт Python» (PEP), хоча вони в процесі цього. Тим не менш, він уже використовується як «стандарт» кількома інструментами. Це значно покращує сумісність, оскільки ви можете переключити Uvicorn на будь-який інший сервер ASGI (наприклад, Daphne або Hypercorn), або ви можете додати інструменти, сумісні з ASGI, як-от `python-socketio`. @@ -464,9 +464,9 @@ ASGI — це новий «стандарт», який розробляєтьс ### [Uvicorn](https://www.uvicorn.dev/) { #uvicorn } -Uvicorn — це блискавичний сервер ASGI, побудований на uvloop і httptools. +Uvicorn - це блискавичний сервер ASGI, побудований на uvloop і httptools. -Це не веб-фреймворк, а сервер. Наприклад, він не надає інструментів для маршрутизації. Це те, що фреймворк на кшталт Starlette (або **FastAPI**) забезпечить поверх нього. +Це не веб-фреймворк, а сервер. Наприклад, він не надає інструментів для маршрутизації за шляхами. Це те, що фреймворк на кшталт Starlette (або **FastAPI**) забезпечить поверх нього. Це рекомендований сервер для Starlette і **FastAPI**. diff --git a/docs/uk/docs/async.md b/docs/uk/docs/async.md index 72e29b3ea..9a9a90d12 100644 --- a/docs/uk/docs/async.md +++ b/docs/uk/docs/async.md @@ -1,6 +1,6 @@ # Рівночасність і async / await { #concurrency-and-async-await } -Деталі щодо синтаксису `async def` для функцій операції шляху і деякі відомості про асинхронний код, рівночасність і паралелізм. +Деталі щодо синтаксису `async def` для *функцій операції шляху* і деякі відомості про асинхронний код, рівночасність і паралелізм. ## Поспішаєте? { #in-a-hurry } @@ -12,7 +12,7 @@ results = await some_library() ``` -Тоді оголошуйте ваші функції операції шляху з `async def`, наприклад: +Тоді оголошуйте ваші *функції операції шляху* з `async def`, наприклад: ```Python hl_lines="2" @app.get('/') @@ -29,7 +29,7 @@ async def read_results(): --- -Якщо ви використовуєте сторонню бібліотеку, яка взаємодіє з чимось (база даних, API, файлова система тощо) і не підтримує використання `await` (наразі це стосується більшості бібліотек баз даних), тоді оголошуйте ваші функції операції шляху як зазвичай, просто з `def`, наприклад: +Якщо ви використовуєте сторонню бібліотеку, яка взаємодіє з чимось (база даних, API, файлова система тощо) і не підтримує використання `await` (наразі це стосується більшості бібліотек баз даних), тоді оголошуйте ваші *функції операції шляху* як зазвичай, просто з `def`, наприклад: ```Python hl_lines="2" @app.get('/') @@ -48,7 +48,7 @@ def results(): --- -Примітка: ви можете змішувати `def` і `async def` у ваших функціях операції шляху скільки завгодно і визначати кожну з них найкращим для вас способом. FastAPI зробить з ними все правильно. +**Примітка**: ви можете змішувати `def` і `async def` у ваших *функціях операції шляху* скільки завгодно і визначати кожну з них найкращим для вас способом. FastAPI зробить з ними все правильно. У будь-якому з наведених випадків FastAPI все одно працюватиме асинхронно і буде надзвичайно швидким. @@ -56,17 +56,17 @@ def results(): ## Технічні деталі { #technical-details } -Сучасні версії Python мають підтримку «асинхронного коду» за допомогою так званих «співпрограм» з синтаксисом **`async` і `await`**. +Сучасні версії Python мають підтримку **«асинхронного коду»** за допомогою так званих **«співпрограм»** з синтаксисом **`async` і `await`**. Розгляньмо цю фразу по частинах у секціях нижче: -- Асинхронний код -- `async` і `await` -- Співпрограми +- **Асинхронний код** +- **`async` і `await`** +- **Співпрограми** ## Асинхронний код { #asynchronous-code } -Асинхронний код означає, що мова 💬 має спосіб сказати комп’ютеру/програмі 🤖, що в певний момент у коді він 🤖 має почекати, поки «щось інше» завершиться десь ще. Скажімо, це «щось інше» називається «slow-file» 📝. +Асинхронний код означає, що мова 💬 має спосіб сказати комп’ютеру/програмі 🤖, що в певний момент у коді він 🤖 має почекати, поки *«щось інше»* завершиться десь ще. Скажімо, це *«щось інше»* називається «slow-file» 📝. Отже, в цей час комп’ютер може піти і зробити іншу роботу, доки «slow-file» 📝 завершується. @@ -97,9 +97,9 @@ def results(): Ідею **асинхронного** коду, описану вище, інколи також називають **«рівночасністю»**. Вона відрізняється від **«паралелізму»**. -І рівночасність, і паралелізм стосуються «різних речей, що відбуваються більш-менш одночасно». +**Рівночасність** і **паралелізм** стосуються «різних речей, що відбуваються більш-менш одночасно». -Але деталі між рівночасністю і паралелізмом досить різні. +Але деталі між *рівночасністю* і *паралелізмом* досить різні. Щоб побачити різницю, уявімо таку історію про бургери: @@ -257,7 +257,7 @@ def results(): Ні! Це не мораль історії. -Рівночасність відрізняється від паралелізму. І вона краща у конкретних сценаріях, що містять багато очікування. Через це зазвичай вона значно краща за паралелізм для розробки вебзастосунків. Але не для всього. +Рівночасність відрізняється від паралелізму. І вона краща у **конкретних** сценаріях, що містять багато очікування. Через це зазвичай вона значно краща за паралелізм для розробки вебзастосунків. Але не для всього. Щоб урівноважити це, уявімо коротку історію: @@ -273,15 +273,15 @@ def results(): Завершення займе той самий час із «чергами» чи без (рівночасність), і ви виконаєте той самий обсяг роботи. -Але в цьому випадку, якби ви могли привести 8 колишніх касирів/кухарів/тепер прибиральників, і кожен з них (разом із вами) взяв би свою зону будинку для прибирання, ви могли б виконати всю роботу паралельно — з додатковою допомогою — і завершити значно швидше. +Але в цьому випадку, якби ви могли привести 8 колишніх касирів/кухарів/тепер прибиральників, і кожен з них (разом із вами) взяв би свою зону будинку для прибирання, ви могли б виконати всю роботу **паралельно** - з додатковою допомогою - і завершити значно швидше. У цьому сценарії кожен з прибиральників (включно з вами) був би процесором, що виконує свою частину роботи. -І оскільки більшість часу виконання займає реальна робота (а не очікування), а роботу на комп’ютері виконує CPU, ці проблеми називають «CPU bound». +І оскільки більшість часу виконання займає реальна робота (а не очікування), а роботу на комп’ютері виконує CPU, ці проблеми називають **«CPU bound»**. --- -Поширені приклади «CPU bound» операцій - це речі, що потребують складної математичної обробки. +Поширені приклади **CPU bound** операцій - це речі, що потребують складної математичної обробки. Наприклад: @@ -294,7 +294,7 @@ def results(): З **FastAPI** ви можете скористатися рівночасністю, що дуже поширена у веброзробці (та ж головна принада NodeJS). -Але ви також можете використати переваги паралелізму і багатопроцесорності (наявність кількох процесів, що працюють паралельно) для навантажень «CPU bound», як у системах машинного навчання. +Але ви також можете використати переваги паралелізму і багатопроцесорності (наявність кількох процесів, що працюють паралельно) для навантажень **«CPU bound»**, як у системах машинного навчання. Це, плюс простий факт, що Python є основною мовою для **Data Science**, машинного навчання і особливо глибокого навчання, робить FastAPI дуже вдалим вибором для веб API та застосунків Data Science / машинного навчання (серед багатьох інших). @@ -340,7 +340,7 @@ burgers = get_burgers(2) --- -Отже, якщо ви використовуєте бібліотеку, яку можна викликати з `await`, вам потрібно створити функцію операції шляху, що її використовує, з `async def`, як тут: +Отже, якщо ви використовуєте бібліотеку, яку можна викликати з `await`, вам потрібно створити *функцію операції шляху*, що її використовує, з `async def`, як тут: ```Python hl_lines="2-3" @app.get('/burgers') @@ -357,7 +357,7 @@ async def read_burgers(): Тож як же викликати першу `async`-функцію - курка чи яйце? -Якщо ви працюєте з **FastAPI**, вам не потрібно про це турбуватися, адже цією «першою» функцією буде ваша функція операції шляху, і FastAPI знатиме, як учинити правильно. +Якщо ви працюєте з **FastAPI**, вам не потрібно про це турбуватися, адже цією «першою» функцією буде ваша *функція операції шляху*, і FastAPI знатиме, як учинити правильно. Але якщо ви хочете використовувати `async` / `await` без FastAPI, ви також можете це зробити. @@ -395,7 +395,7 @@ Starlette (і **FastAPI**) базуються на [AnyIO](https://anyio.readthe Погляньмо на ту саму фразу ще раз: -> Сучасні версії Python мають підтримку «асинхронного коду» за допомогою так званих «співпрограм», з синтаксисом **`async` і `await`**. +> Сучасні версії Python мають підтримку **«асинхронного коду»** за допомогою так званих **«співпрограм»**, з синтаксисом **`async` і `await`**. Тепер це має більше сенсу. ✨ @@ -415,11 +415,11 @@ Starlette (і **FastAPI**) базуються на [AnyIO](https://anyio.readthe ### Функції операції шляху { #path-operation-functions } -Коли ви оголошуєте функцію операції шляху зі звичайним `def` замість `async def`, вона виконується у зовнішньому пулі потоків (threadpool), який потім «очікується», замість прямого виклику (оскільки прямий виклик блокував би сервер). +Коли ви оголошуєте *функцію операції шляху* зі звичайним `def` замість `async def`, вона виконується у зовнішньому пулі потоків (threadpool), який потім «очікується», замість прямого виклику (оскільки прямий виклик блокував би сервер). -Якщо ви прийшли з іншого async-фреймворку, який не працює так, як описано вище, і звикли визначати тривіальні, лише обчислювальні функції операції шляху зі звичайним `def` заради крихітного виграшу у продуктивності (близько 100 наносекунд), зверніть увагу, що у **FastAPI** ефект буде протилежним. У таких випадках краще використовувати `async def`, якщо тільки ваші функції операції шляху не використовують код, що виконує блокуюче I/O. +Якщо ви прийшли з іншого async-фреймворку, який не працює так, як описано вище, і звикли визначати тривіальні, лише обчислювальні *функції операції шляху* зі звичайним `def` заради крихітного виграшу у продуктивності (близько 100 наносекунд), зверніть увагу, що у **FastAPI** ефект буде протилежним. У таких випадках краще використовувати `async def`, якщо тільки ваші *функції операції шляху* не використовують код, що виконує блокуюче I/O. -Втім, у будь-якій ситуації є велика ймовірність, що **FastAPI** [все одно буде швидшим](index.md#performance) (або принаймні порівнянним) за ваш попередній фреймворк. +Втім, в обох ситуаціях є велика ймовірність, що **FastAPI** [все одно буде швидшим](index.md#performance) (або принаймні порівнянним) за ваш попередній фреймворк. ### Залежності { #dependencies } @@ -433,7 +433,7 @@ Starlette (і **FastAPI**) базуються на [AnyIO](https://anyio.readthe Будь-яка інша допоміжна функція, яку ви викликаєте безпосередньо, може бути створена зі звичайним `def` або `async def`, і FastAPI не впливатиме на спосіб її виклику. -Це відрізняється від функцій, які FastAPI викликає за вас: функції операції шляху і залежності. +Це відрізняється від функцій, які FastAPI викликає за вас: *функції операції шляху* і залежності. Якщо ваша допоміжна функція є звичайною функцією з `def`, її буде викликано безпосередньо (як ви написали у своєму коді), не в пулі потоків; якщо функція створена з `async def`, тоді вам слід використовувати `await` при її виклику у вашому коді. diff --git a/docs/uk/docs/environment-variables.md b/docs/uk/docs/environment-variables.md index 7b5223bc2..95c142c7c 100644 --- a/docs/uk/docs/environment-variables.md +++ b/docs/uk/docs/environment-variables.md @@ -6,13 +6,13 @@ /// -Змінна оточення (також відома як «env var») - це змінна, що існує поза кодом Python, в операційній системі, і може бути прочитана вашим кодом Python (а також іншими програмами). +Змінна оточення (також відома як «**env var**») - це змінна, що існує **поза** кодом Python, в **операційній системі**, і може бути прочитана вашим кодом Python (а також іншими програмами). -Змінні оточення корисні для роботи з налаштуваннями застосунку, як частина встановлення Python тощо. +Змінні оточення корисні для роботи з **налаштуваннями** застосунку, як частина **встановлення** Python тощо. ## Створення і використання змінних оточення { #create-and-use-env-vars } -Ви можете створювати і використовувати змінні оточення в оболонці (терміналі) без участі Python: +Ви можете **створювати** і використовувати змінні оточення в **оболонці (терміналі)** без участі Python: //// tab | Linux, macOS, Windows Bash @@ -52,7 +52,7 @@ Hello Wade Wilson ## Читання змінних оточення в Python { #read-env-vars-in-python } -Ви також можете створити змінні оточення поза Python, у терміналі (або будь-яким іншим способом), а потім зчитати їх у Python. +Ви також можете створити змінні оточення **поза** Python, у терміналі (або будь-яким іншим способом), а потім **зчитати їх у Python**. Наприклад, у вас може бути файл `main.py` з: @@ -127,9 +127,9 @@ Hello Wade Wilson from Python //// -Оскільки змінні оточення можна встановлювати поза кодом, але читати в коді, і їх не потрібно зберігати (фіксувати у `git`) разом з іншими файлами, їх часто використовують для конфігурацій або налаштувань. +Оскільки змінні оточення можна встановлювати поза кодом, але читати в коді, і їх не потрібно зберігати (фіксувати у `git`) разом з іншими файлами, їх часто використовують для конфігурацій або **налаштувань**. -Ви також можете створити змінну оточення лише для конкретного запуску програми, вона буде доступна тільки цій програмі і лише на час її виконання. +Ви також можете створити змінну оточення лише для **конкретного запуску програми**, вона буде доступна тільки цій програмі і лише на час її виконання. Щоб зробити це, створіть її безпосередньо перед командою запуску програми, в тому самому рядку: @@ -159,15 +159,15 @@ Hello World from Python ## Типи і перевірка { #types-and-validation } -Ці змінні оточення можуть містити лише текстові строки, оскільки вони зовнішні щодо Python і мають бути сумісними з іншими програмами та рештою системи (і навіть з різними операційними системами, як-от Linux, Windows, macOS). +Ці змінні оточення можуть містити лише **текстові строки**, оскільки вони зовнішні щодо Python і мають бути сумісними з іншими програмами та рештою системи (і навіть з різними операційними системами, як-от Linux, Windows, macOS). -Це означає, що будь-яке значення, прочитане в Python зі змінної оточення, буде `str`, а будь-яке перетворення до іншого типу або будь-яка перевірка має виконуватися в коді. +Це означає, що **будь-яке значення**, прочитане в Python зі змінної оточення, **буде `str`**, а будь-яке перетворення до іншого типу або будь-яка перевірка має виконуватися в коді. -Ви дізнаєтеся більше про використання змінних оточення для роботи з налаштуваннями застосунку в розділі [Просунутий посібник користувача - Налаштування і змінні оточення](./advanced/settings.md). +Ви дізнаєтеся більше про використання змінних оточення для роботи з **налаштуваннями застосунку** в розділі [Просунутий посібник користувача - Налаштування і змінні оточення](./advanced/settings.md). ## Змінна оточення `PATH` { #path-environment-variable } -Є спеціальна змінна оточення `PATH`, яку використовують операційні системи (Linux, macOS, Windows) для пошуку програм для запуску. +Є **спеціальна** змінна оточення **`PATH`**, яку використовують операційні системи (Linux, macOS, Windows) для пошуку програм для запуску. Значення змінної `PATH` - це довга строка, що складається з каталогів, розділених двокрапкою `:` у Linux і macOS та крапкою з комою `;` у Windows. @@ -203,11 +203,11 @@ C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System3 //// -Коли ви вводите команду в терміналі, операційна система шукає програму в кожному з тих каталогів, перелічених у змінній оточення `PATH`. +Коли ви вводите **команду** в терміналі, операційна система **шукає** програму в **кожному з тих каталогів**, перелічених у змінній оточення `PATH`. -Наприклад, коли ви вводите `python` у терміналі, операційна система шукає програму з назвою `python` у першому каталозі цього списку. +Наприклад, коли ви вводите `python` у терміналі, операційна система шукає програму з назвою `python` у **першому каталозі** цього списку. -Якщо знайде, вона використає її. Інакше продовжить пошук в інших каталогах. +Якщо знайде, вона **використає її**. Інакше продовжить пошук в **інших каталогах**. ### Встановлення Python і оновлення `PATH` { #installing-python-and-updating-the-path } @@ -255,7 +255,7 @@ $ python //// tab | Linux, macOS -Система знайде програму `python` у `/opt/custompython/bin` і запустить її. +Система **знайде** програму `python` у `/opt/custompython/bin` і запустить її. Це приблизно еквівалентно введенню: @@ -271,7 +271,7 @@ $ /opt/custompython/bin/python //// tab | Windows -Система знайде програму `python` у `C:\opt\custompython\bin\python` і запустить її. +Система **знайде** програму `python` у `C:\opt\custompython\bin\python` і запустить її. Це приблизно еквівалентно введенню: @@ -289,7 +289,7 @@ $ C:\opt\custompython\bin\python ## Висновок { #conclusion } -Тепер ви маєте базове розуміння того, що таке змінні оточення і як їх використовувати в Python. +Тепер ви маєте базове розуміння того, що таке **змінні оточення** і як їх використовувати в Python. Також можна прочитати більше у [Вікіпедії про змінну оточення](https://en.wikipedia.org/wiki/Environment_variable). diff --git a/docs/uk/docs/features.md b/docs/uk/docs/features.md index 2ee24181f..3f8b0049b 100644 --- a/docs/uk/docs/features.md +++ b/docs/uk/docs/features.md @@ -6,8 +6,8 @@ ### На основі відкритих стандартів { #based-on-open-standards } -* [**OpenAPI**](https://github.com/OAI/OpenAPI-Specification) для створення API, включаючи оголошення шляхів операцій, параметрів, тіл запитів, безпеки тощо. -* Автоматична документація моделей даних за допомогою [**JSON Schema**](https://json-schema.org/) (оскільки OpenAPI базується саме на JSON Schema). +* [**OpenAPI**](https://github.com/OAI/OpenAPI-Specification) для створення API, включаючи оголошення шляхових операцій, параметрів, тіл запитів, безпеки тощо. +* Автоматична документація моделей даних за допомогою [**Схеми JSON**](https://json-schema.org/) (оскільки OpenAPI базується саме на Схемі JSON). * Розроблено на основі цих стандартів після ретельного аналізу, а не як додатковий рівень поверх основної архітектури. * Це також дає змогу використовувати автоматичну **генерацію клієнтського коду** багатьма мовами. @@ -15,9 +15,9 @@ Інтерактивна документація API та вебінтерфейси для його дослідження. Оскільки фреймворк базується на OpenAPI, є кілька варіантів, 2 з яких включені за замовчуванням. -* [**Swagger UI**](https://github.com/swagger-api/swagger-ui) — з інтерактивним дослідженням, викликом і тестуванням вашого API прямо з браузера. +* [**Swagger UI**](https://github.com/swagger-api/swagger-ui) - з інтерактивним дослідженням, викликом і тестуванням вашого API прямо з браузера. -![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png) +![взаємодія Swagger UI](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png) * Альтернативна документація API за допомогою [**ReDoc**](https://github.com/Rebilly/ReDoc). @@ -27,7 +27,7 @@ Усе базується на стандартних оголошеннях **типів Python** (завдяки Pydantic). Жодного нового синтаксису для вивчення. Лише стандартний сучасний Python. -Якщо вам потрібно 2-хвилинне нагадування про те, як використовувати типи Python (навіть якщо ви не використовуєте FastAPI), перегляньте короткий підручник: [Типи Python](python-types.md). +Якщо вам потрібно 2-хвилинне нагадування про те, як використовувати типи Python (навіть якщо ви не використовуєте FastAPI), перегляньте короткий навчальний посібник: [Типи Python](python-types.md). Ви пишете стандартний Python з типами: @@ -85,13 +85,13 @@ my_second_user: User = User(**second_user_data) * у [Visual Studio Code](https://code.visualstudio.com/): -![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png) +![підтримка редактора](https://fastapi.tiangolo.com/img/vscode-completion.png) * у [PyCharm](https://www.jetbrains.com/pycharm/): -![editor support](https://fastapi.tiangolo.com/img/pycharm-completion.png) +![підтримка редактора](https://fastapi.tiangolo.com/img/pycharm-completion.png) -Ви отримаєте автодоповнення в коді, який раніше могли вважати навіть неможливим. Наприклад, для ключа `price` всередині JSON body (який міг бути вкладеним), що надходить із запиту. +Ви отримаєте автодоповнення в коді, який раніше могли вважати навіть неможливим. Наприклад, для ключа `price` всередині тіла JSON (яке могло бути вкладеним), що надходить із запиту. Більше не доведеться вводити неправильні назви ключів, постійно повертатися до документації або прокручувати вгору-вниз, щоб знайти, чи ви зрештою використали `username` чи `user_name`. @@ -106,7 +106,7 @@ FastAPI має розумні **налаштування за замовчува * Підтримка валідації для більшості (або всіх?) **типів даних Python**, зокрема: * JSON-об'єктів (`dict`). * JSON-масивів (`list`) із визначенням типів елементів. - * Полів-рядків (`str`) із визначенням мінімальної та максимальної довжини. + * Полів-строк (`str`) із визначенням мінімальної та максимальної довжини. * Чисел (`int`, `float`) з мінімальними та максимальними значеннями тощо. * Валідація для більш екзотичних типів, як-от: @@ -124,30 +124,30 @@ FastAPI має розумні **налаштування за замовчува Підтримуються всі схеми безпеки, визначені в OpenAPI, включно з: * HTTP Basic. -* **OAuth2** (також із підтримкою **JWT tokens**). Перегляньте підручник: [OAuth2 із JWT](tutorial/security/oauth2-jwt.md). +* **OAuth2** (також із підтримкою **JWT tokens**). Перегляньте навчальний посібник: [OAuth2 із JWT](tutorial/security/oauth2-jwt.md). * Ключі API в: * Заголовках. * Параметрах запиту. - * Cookies тощо. + * Кукі тощо. -А також усі можливості безпеки від Starlette (зокрема **session cookies**). +А також усі можливості безпеки від Starlette (зокрема **сесійні кукі**). Усе це зроблено як багаторазові інструменти та компоненти, які легко інтегруються з вашими системами, сховищами даних, реляційними та NoSQL базами даних тощо. ### Впровадження залежностей { #dependency-injection } -FastAPI містить надзвичайно просту у використанні, але надзвичайно потужну систему Впровадження залежностей. +FastAPI містить надзвичайно просту у використанні, але надзвичайно потужну систему Впровадження залежностей. * Навіть залежності можуть мати власні залежності, утворюючи ієрархію або **«граф» залежностей**. * Усе **автоматично обробляється** фреймворком. * Усі залежності можуть вимагати дані із запитів і **розширювати обмеження операції шляху** та автоматичну документацію. -* **Автоматична валідація** навіть для *операції шляху*, визначених у залежностях. +* **Автоматична валідація** навіть для параметрів *операції шляху*, визначених у залежностях. * Підтримка складних систем автентифікації користувачів, **підключень до баз даних** тощо. * **Жодних компромісів** із базами даних, фронтендами тощо. Але проста інтеграція з усіма ними. ### Необмежені «плагіни» { #unlimited-plug-ins } -Інакше кажучи, вони не потрібні — імпортуйте та використовуйте код, який вам потрібен. +Інакше кажучи, вони не потрібні - імпортуйте та використовуйте код, який вам потрібен. Будь-яка інтеграція спроєктована так, щоб її було дуже просто використовувати (із залежностями), тож ви можете створити «плагін» для свого застосунку у 2 рядках коду, використовуючи ту саму структуру та синтаксис, що й для ваших *операцій шляху*. @@ -163,15 +163,15 @@ FastAPI містить надзвичайно просту у використа `FastAPI` фактично є підкласом `Starlette`. Тому, якщо ви вже знайомі зі Starlette або використовуєте його, більшість функціональності працюватиме так само. -З **FastAPI** ви отримуєте всі можливості **Starlette** (адже FastAPI — це просто Starlette на стероїдах): +З **FastAPI** ви отримуєте всі можливості **Starlette** (адже FastAPI - це просто Starlette на стероїдах): * Разюча продуктивність. Це [один із найшвидших доступних Python-фреймворків, на рівні з **NodeJS** і **Go**](https://github.com/encode/starlette#performance). * Підтримка **WebSocket**. * Фонові задачі у процесі. -* Події запуску та завершення роботи. +* Події запуску та вимкнення. * Клієнт для тестування, побудований на HTTPX. * Підтримка **CORS**, **GZip**, статичних файлів, потокових відповідей. -* Підтримка **сесій** і **cookie**. +* Підтримка **сесій і кукі**. * 100% покриття тестами. * 100% анотована типами кодова база. @@ -183,7 +183,7 @@ FastAPI містить надзвичайно просту у використа Це також означає, що в багатьох випадках ви можете передати той самий об'єкт, який отримуєте із запиту, **безпосередньо в базу даних**, оскільки все автоматично перевіряється. -Те саме застосовується й у зворотному напрямку — у багатьох випадках ви можете просто передати об'єкт, який отримуєте з бази даних, **безпосередньо клієнту**. +Те саме застосовується й у зворотному напрямку - у багатьох випадках ви можете просто передати об'єкт, який отримуєте з бази даних, **безпосередньо клієнту**. З **FastAPI** ви отримуєте всі можливості **Pydantic** (адже FastAPI базується на Pydantic для обробки всіх даних): @@ -193,8 +193,8 @@ FastAPI містить надзвичайно просту у використа * Легко працює з вашим **IDE/linter/мозком**: * Оскільки структури даних pydantic є просто екземплярами класів, які ви визначаєте; автодоповнення, лінтинг, mypy і ваша інтуїція повинні добре працювати з вашими перевіреними даними. * Валідує **складні структури**: - * Використання ієрархічних моделей Pydantic, Python `typing`’s `List` і `Dict` тощо. - * Валідатори дають змогу складні схеми даних чітко й просто визначати, перевіряти й документувати як JSON Schema. + * Використання ієрархічних моделей Pydantic, `List` і `Dict` з Python `typing` тощо. + * Валідатори дають змогу складні схеми даних чітко й просто визначати, перевіряти й документувати як Схему JSON. * Ви можете мати глибоко **вкладені JSON** об'єкти, і всі вони будуть валідовані та анотовані. * **Розширюваність**: * Pydantic дозволяє визначати користувацькі типи даних або ви можете розширити валідацію методами в моделі, позначеними декоратором validator. diff --git a/docs/uk/docs/index.md b/docs/uk/docs/index.md index bcc429c7e..fe7d111d7 100644 --- a/docs/uk/docs/index.md +++ b/docs/uk/docs/index.md @@ -49,7 +49,7 @@ FastAPI - це сучасний, швидкий (високопродуктив * **Простий**: спроєктований так, щоб бути простим у використанні та вивченні. Менше часу на читання документації. * **Короткий**: мінімізує дублювання коду. Кілька можливостей з кожного оголошення параметра. Менше помилок. * **Надійний**: ви отримуєте код, готовий до продакшну. З автоматичною інтерактивною документацією. -* **Заснований на стандартах**: базується на (і повністю сумісний з) відкритими стандартами для API: [OpenAPI](https://github.com/OAI/OpenAPI-Specification) (раніше відомий як Swagger) та [JSON Schema](https://json-schema.org/). +* **Заснований на стандартах**: базується на (і повністю сумісний з) відкритими стандартами для API: [OpenAPI](https://github.com/OAI/OpenAPI-Specification) (раніше відомий як Swagger) та [Схема JSON](https://json-schema.org/). * оцінка на основі тестів, проведених внутрішньою командою розробників, що створює продакшн-застосунки. @@ -105,47 +105,47 @@ FastAPI - це сучасний, швидкий (високопродуктив
-
«Я дуже часто використовую FastAPI останнім часом. Я насправді планую використовувати його для всіх ML-сервісів моєї команди в Microsoft. Деякі з них інтегруються до основного продукту Windows і деякі з продуктів Office».
-
— Kabir Khan, Microsoft (ref)
+
«Я дуже часто використовую FastAPI останнім часом. Я насправді планую використовувати його для всіх ML-сервісів моєї команди в Microsoft. Деякі з них інтегруються до основного продукту Windows і деяких продуктів Office».
+
- Kabir Khan, Microsoft (джерело)
-"_[...] I'm using **FastAPI** a ton these days. [...] I'm actually planning to use it for all of my team's **ML services at Microsoft**. Some of them are getting integrated into the core **Windows** product and some **Office** products._" +"_[...] Я дуже часто використовую **FastAPI** останнім часом. [...] Я насправді планую використовувати його для всіх **ML-сервісів моєї команди в Microsoft**. Деякі з них інтегруються до основного продукту **Windows** і деяких продуктів **Office**._" -
Kabir Khan - Microsoft (ref)
+
Kabir Khan - Microsoft (джерело)
--- -"_We adopted the **FastAPI** library to spawn a **REST** server that can be queried to obtain **predictions**. [for Ludwig]_" +"_Ми прийняли бібліотеку **FastAPI**, щоб запустити сервер **REST**, до якого можна надсилати запити для отримання **прогнозів**. [для Ludwig]_" -
Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (ref)
+
Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (джерело)
--- -"_**Netflix** is pleased to announce the open-source release of our **crisis management** orchestration framework: **Dispatch**! [built with **FastAPI**]_" +"_**Netflix** із задоволенням оголошує про випуск з відкритим кодом нашого фреймворку оркестрації **керування кризами**: **Dispatch**! [побудовано з **FastAPI**]_" -
Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)
+
Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (джерело)
--- -"_If anyone is looking to build a production Python API, I would highly recommend **FastAPI**. It is **beautifully designed**, **simple to use** and **highly scalable**, it has become a **key component** in our API first development strategy and is driving many automations and services such as our Virtual TAC Engineer._" +"_Якщо хтось хоче створювати продакшн-API на Python, я дуже рекомендую **FastAPI**. Він **чудово спроєктований**, **простий у використанні** і **дуже масштабований**, він став **ключовим компонентом** у нашій стратегії розробки з пріоритетом API і забезпечує багато автоматизацій та сервісів, як-от наш Virtual TAC Engineer._" -
Deon Pillsbury - Cisco (ref)
+
Deon Pillsbury - Cisco (джерело)
--- @@ -239,7 +239,7 @@ async def read_item(item_id: int, q: str | None = None): **Примітка**: -Якщо ви не знаєте, перегляньте розділ _"In a hurry?"_ про [`async` та `await` у документації](https://fastapi.tiangolo.com/uk/async/#in-a-hurry). +Якщо ви не знаєте, перегляньте розділ _«Поспішаєте?»_ про [`async` та `await` у документації](https://fastapi.tiangolo.com/uk/async/#in-a-hurry). @@ -412,10 +412,10 @@ item: Item * JSON. * Параметрів шляху. * Параметрів запиту. - * Cookies. - * Headers. - * Forms. - * Files. + * Кукі. + * Заголовків. + * Форм. + * Файлів. * Перетворення вихідних даних: перетворення з даних і типів Python у мережеві дані (як JSON): * Перетворення типів Python (`str`, `int`, `float`, `bool`, `list`, тощо). * Обʼєктів `datetime`. @@ -477,10 +477,10 @@ item: Item **Попередження про спойлер**: навчальний посібник - посібник користувача містить: -* Оголошення **параметрів** з інших різних місць, як-от: **headers**, **cookies**, **form fields** та **files**. +* Оголошення **параметрів** з інших різних місць, як-от: **заголовки**, **кукі**, **поля форми** та **файли**. * Як встановлювати **обмеження валідації** як `maximum_length` або `regex`. * Дуже потужну і просту у використанні систему **Впровадження залежностей**. -* Безпеку та автентифікацію, включно з підтримкою **OAuth2** з **JWT tokens** та **HTTP Basic** auth. +* Безпеку та автентифікацію, включно з підтримкою **OAuth2** з **токенами JWT** та **базовою автентифікацією HTTP**. * Досконаліші (але однаково прості) техніки для оголошення **глибоко вкладених моделей JSON** (завдяки Pydantic). * Інтеграцію **GraphQL** з [Strawberry](https://strawberry.rocks) та іншими бібліотеками. * Багато додаткових можливостей (завдяки Starlette) як-от: @@ -518,13 +518,13 @@ CLI автоматично визначить ваш застосунок FastAP Він спрощує процес **створення**, **розгортання** та **доступу** до API з мінімальними зусиллями. -Він забезпечує той самий **developer experience** створення застосунків на FastAPI під час їх **розгортання** у хмарі. 🎉 +Він забезпечує той самий **досвід розробника** створення застосунків на FastAPI під час їх **розгортання** у хмарі. 🎉 -FastAPI Cloud - основний спонсор і джерело фінансування open source проєктів *FastAPI and friends*. ✨ +FastAPI Cloud - основний спонсор і джерело фінансування проєктів з відкритим кодом *FastAPI and friends*. ✨ #### Розгортання в інших хмарних провайдерів { #deploy-to-other-cloud-providers } -FastAPI - open source проєкт і базується на стандартах. Ви можете розгортати застосунки FastAPI в будь-якому хмарному провайдері, який ви оберете. +FastAPI - проєкт з відкритим кодом і базується на стандартах. Ви можете розгортати застосунки FastAPI в будь-якому хмарному провайдері, який ви оберете. Дотримуйтеся інструкцій вашого хмарного провайдера, щоб розгорнути застосунки FastAPI у нього. 🤓 @@ -532,7 +532,7 @@ FastAPI - open source проєкт і базується на стандарта Незалежні тести TechEmpower показують застосунки **FastAPI**, які працюють під керуванням Uvicorn, як [одні з найшвидших доступних Python-фреймворків](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7), поступаючись лише Starlette та Uvicorn (які внутрішньо використовуються в FastAPI). (*) -Щоб дізнатися більше, перегляньте розділ [Benchmarks](https://fastapi.tiangolo.com/uk/benchmarks/). +Щоб дізнатися більше, перегляньте розділ [Тести продуктивності](https://fastapi.tiangolo.com/uk/benchmarks/). ## Залежності { #dependencies } diff --git a/docs/uk/docs/python-types.md b/docs/uk/docs/python-types.md index 332d78f21..06cc67f02 100644 --- a/docs/uk/docs/python-types.md +++ b/docs/uk/docs/python-types.md @@ -2,7 +2,7 @@ Python підтримує додаткові «підказки типів» (також звані «анотаціями типів»). -Ці **«підказки типів»** або анотації — це спеціальний синтаксис, що дозволяє оголошувати тип змінної. +Ці **«підказки типів»** або анотації - це спеціальний синтаксис, що дозволяє оголошувати тип змінної. За допомогою оголошення типів для ваших змінних редактори та інструменти можуть надати вам кращу підтримку. @@ -50,7 +50,7 @@ John Doe Це буде `upper`? Чи `uppercase`? `first_uppercase`? `capitalize`? -Тоді ви спробуєте давнього друга програміста — автозаповнення редактора коду. +Тоді ви спробуєте давнього друга програміста - автозаповнення редактора коду. Ви надрукуєте перший параметр функції, `first_name`, тоді крапку (`.`), а тоді натиснете `Ctrl+Space`, щоб запустити автозаповнення. @@ -147,20 +147,20 @@ def some_function(data: Any): print(data) ``` -### Generic типи { #generic-types } +### Узагальнені типи { #generic-types } Деякі типи можуть приймати «параметри типів» у квадратних дужках, щоб визначити їх внутрішні типи. Наприклад, «list строк» буде оголошений як `list[str]`. -Ці типи, які можуть приймати параметри типів, називаються **generic типами** або **generics**. +Ці типи, які можуть приймати параметри типів, називаються **узагальненими типами** або **дженериками**. -Ви можете використовувати ті самі вбудовані типи як generics (з квадратними дужками та типами всередині): +Ви можете використовувати ті самі вбудовані типи як дженерики (з квадратними дужками та типами всередині): * `list` * `tuple` * `set` * `dict` -#### List { #list } +#### Список { #list } Наприклад, давайте визначимо змінну, яка буде `list` із `str`. @@ -176,11 +176,11 @@ def some_function(data: Any): Ці внутрішні типи в квадратних дужках називаються «параметрами типу». -У цьому випадку `str` — це параметр типу, переданий у `list`. +У цьому випадку `str` - це параметр типу, переданий у `list`. /// -Це означає: «змінна `items` — це `list`, і кожен з елементів у цьому списку — `str`». +Це означає: «змінна `items` - це `list`, і кожен з елементів у цьому списку - `str`». Зробивши це, ваш редактор може надати підтримку навіть під час обробки елементів зі списку: @@ -192,7 +192,7 @@ def some_function(data: Any): І все ж редактор знає, що це `str`, і надає підтримку для цього. -#### Tuple and Set { #tuple-and-set } +#### Кортеж і множина { #tuple-and-set } Ви повинні зробити те ж саме, щоб оголосити `tuple` і `set`: @@ -200,10 +200,10 @@ def some_function(data: Any): Це означає: -* Змінна `items_t` — це `tuple` з 3 елементами: `int`, ще `int`, та `str`. -* Змінна `items_s` — це `set`, і кожен його елемент має тип `bytes`. +* Змінна `items_t` - це `tuple` з 3 елементами: `int`, ще `int`, та `str`. +* Змінна `items_s` - це `set`, і кожен його елемент має тип `bytes`. -#### Dict { #dict } +#### Словник { #dict } Щоб оголосити `dict`, вам потрібно передати 2 параметри типу, розділені комами. @@ -215,17 +215,17 @@ def some_function(data: Any): Це означає: -* Змінна `prices` — це `dict`: +* Змінна `prices` - це `dict`: * Ключі цього `dict` мають тип `str` (скажімо, назва кожного предмета). * Значення цього `dict` мають тип `float` (скажімо, ціна кожного предмета). -#### Union { #union } +#### Об’єднання { #union } Ви можете оголосити, що змінна може бути будь-яким із **кількох типів**, наприклад `int` або `str`. Щоб визначити це, використовуйте вертикальну риску (`|`), щоб розділити обидва типи. -Це називається «union», тому що змінна може бути чимось із об’єднання цих двох множин типів. +Це називається «об’єднанням», тому що змінна може бути чимось із об’єднання цих двох множин типів. ```Python hl_lines="1" {!> ../../docs_src/python_types/tutorial008b_py310.py!} @@ -263,11 +263,11 @@ def some_function(data: Any): -Зверніть увагу, що це означає: «`one_person` — це **екземпляр** класу `Person`». +Зверніть увагу, що це означає: «`one_person` - це **екземпляр** класу `Person`». -Це не означає: «`one_person` — це **клас** з назвою `Person`». +Це не означає: «`one_person` - це **клас** з назвою `Person`». -## Pydantic моделі { #pydantic-models } +## Моделі Pydantic { #pydantic-models } [Pydantic](https://docs.pydantic.dev/) — це бібліотека Python для валідації даних. @@ -295,7 +295,7 @@ def some_function(data: Any): ## Підказки типів з анотаціями метаданих { #type-hints-with-metadata-annotations } -У Python також є можливість додавати **додаткові метадані** до цих підказок типів за допомогою `Annotated`. +У Python також є можливість додавати **додаткові метадані** до цих підказок типів за допомогою `Annotated`. Ви можете імпортувати `Annotated` з `typing`. @@ -305,7 +305,7 @@ def some_function(data: Any): Але ви можете використати це місце в `Annotated`, щоб надати **FastAPI** додаткові метадані про те, як ви хочете, щоб ваш застосунок поводився. -Важливо пам’ятати, що **перший *параметр типу***, який ви передаєте в `Annotated`, — це **фактичний тип**. Решта — це лише метадані для інших інструментів. +Важливо пам’ятати, що **перший *параметр типу***, який ви передаєте в `Annotated`, - це **фактичний тип**. Решта - це лише метадані для інших інструментів. Наразі вам просто потрібно знати, що `Annotated` існує і що це стандартний Python. 😎 @@ -335,7 +335,7 @@ def some_function(data: Any): * **Перевірки даних**: що надходять від кожного запиту: * Генерування **автоматичних помилок**, що повертаються клієнту, коли дані недійсні. * **Документування** API за допомогою OpenAPI: - * який потім використовується для автоматичної інтерактивної документації користувальницьких інтерфейсів. + * що потім використовується автоматичними інтерактивними користувацькими інтерфейсами документації. Все це може здатися абстрактним. Не хвилюйтеся. Ви побачите все це в дії в [Навчальний посібник - Посібник користувача](tutorial/index.md). diff --git a/docs/uk/docs/virtual-environments.md b/docs/uk/docs/virtual-environments.md index 26ad6b0cb..57f3e90df 100644 --- a/docs/uk/docs/virtual-environments.md +++ b/docs/uk/docs/virtual-environments.md @@ -1,6 +1,6 @@ # Віртуальні середовища { #virtual-environments } -Коли ви працюєте над проєктами Python, вам, імовірно, слід використовувати віртуальне середовище (або схожий механізм), щоб ізолювати пакети, які ви встановлюєте для кожного проєкту. +Коли ви працюєте над проєктами Python, вам, імовірно, слід використовувати **віртуальне середовище** (або схожий механізм), щоб ізолювати пакети, які ви встановлюєте для кожного проєкту. /// note | Примітка @@ -10,19 +10,19 @@ /// tip | Порада -Віртуальне середовище відрізняється від змінної оточення. +**Віртуальне середовище** відрізняється від **змінної оточення**. -Змінна оточення - це змінна в системі, яку можуть використовувати програми. +**Змінна оточення** - це змінна в системі, яку можуть використовувати програми. -Віртуальне середовище - це каталог із файлами в ньому. +**Віртуальне середовище** - це каталог із файлами в ньому. /// /// note | Примітка -На цій сторінці ви дізнаєтеся, як використовувати віртуальні середовища і як вони працюють. +На цій сторінці ви дізнаєтеся, як використовувати **віртуальні середовища** і як вони працюють. -Якщо ви готові прийняти інструмент, що керує всім за вас (включно з установленням Python), спробуйте [uv](https://github.com/astral-sh/uv). +Якщо ви готові прийняти **інструмент, що керує всім** за вас (включно з установленням Python), спробуйте [uv](https://github.com/astral-sh/uv). /// @@ -53,11 +53,11 @@ $ cd awesome-project ## Створіть віртуальне середовище { #create-a-virtual-environment } -Коли ви починаєте працювати над проєктом Python уперше, створіть віртуальне середовище у вашому проєкті **у вашому проєкті**. +Коли ви починаєте працювати над проєктом Python **уперше**, створіть віртуальне середовище **у вашому проєкті**. /// tip | Порада -Це потрібно робити лише один раз на проєкт, не щоразу, коли ви працюєте. +Це потрібно робити лише **один раз на проєкт**, не щоразу, коли ви працюєте. /// @@ -120,7 +120,7 @@ $ uv venv /// tip | Порада -Робіть це щоразу, коли ви починаєте нову сесію термінала для роботи над проєктом. +Робіть це **щоразу**, коли ви починаєте **нову сесію термінала** для роботи над проєктом. /// @@ -164,9 +164,9 @@ $ source .venv/Scripts/activate /// tip | Порада -Кожного разу, коли ви встановлюєте новий пакет у це середовище, активуйте середовище знову. +Кожного разу, коли ви встановлюєте **новий пакет** у це середовище, **активуйте** середовище знову. -Це гарантує, що якщо ви використовуєте програму термінала (CLI), встановлену цим пакетом, ви використовуєте саме ту з вашого віртуального середовища, а не будь-яку іншу, яка може бути встановлена глобально, імовірно з іншою версією, ніж вам потрібно. +Це гарантує, що якщо ви використовуєте **програму термінала (CLI)**, встановлену цим пакетом, ви використовуєте саме ту з вашого віртуального середовища, а не будь-яку іншу, яка може бути встановлена глобально, імовірно з іншою версією, ніж вам потрібно. /// @@ -176,7 +176,7 @@ $ source .venv/Scripts/activate /// tip | Порада -Це необов'язково, але це гарний спосіб перевірити, що все працює як очікується і ви використовуєте саме те віртуальне середовище, яке планували. +Це **необов'язково**, але це гарний спосіб **перевірити**, що все працює як очікується і ви використовуєте саме те віртуальне середовище, яке планували. /// @@ -220,13 +220,13 @@ C:\Users\user\code\awesome-project\.venv\Scripts\python /// -Якщо ви використовуєте `pip` для встановлення пакетів (він іде за замовчуванням із Python), вам слід оновити його до найновішої версії. +Якщо ви використовуєте `pip` для встановлення пакетів (він іде за замовчуванням із Python), вам слід **оновити** його до найновішої версії. Багато дивних помилок під час встановлення пакета вирішуються тим, що спочатку оновлюють `pip`. /// tip | Порада -Зазвичай це роблять один раз, відразу після створення віртуального середовища. +Зазвичай це роблять **один раз**, відразу після створення віртуального середовища. /// @@ -264,7 +264,7 @@ $ python -m ensurepip --upgrade ## Додайте `.gitignore` { #add-gitignore } -Якщо ви використовуєте Git (варто це робити), додайте файл `.gitignore`, щоб виключити з Git усе у вашому `.venv`. +Якщо ви використовуєте **Git** (варто це робити), додайте файл `.gitignore`, щоб виключити з Git усе у вашому `.venv`. /// tip | Порада @@ -274,7 +274,7 @@ $ python -m ensurepip --upgrade /// tip | Порада -Зробіть це один раз, відразу після створення віртуального середовища. +Зробіть це **один раз**, відразу після створення віртуального середовища. /// @@ -308,9 +308,9 @@ $ echo "*" > .venv/.gitignore /// tip | Порада -Робіть це один раз під час встановлення або оновлення пакетів, потрібних вашому проєкту. +Робіть це **один раз** під час встановлення або оновлення пакетів, потрібних вашому проєкту. -Якщо вам потрібно оновити версію або додати новий пакет, ви зробите це знову. +Якщо вам потрібно оновити версію або додати новий пакет, ви **зробите це знову**. /// @@ -421,13 +421,13 @@ Hello World /// tip | Порада -Зазвичай це потрібно робити лише один раз, коли ви створюєте віртуальне середовище. +Зазвичай це потрібно робити лише **один раз**, коли ви створюєте віртуальне середовище. /// ## Деактивуйте віртуальне середовище { #deactivate-the-virtual-environment } -Коли ви завершили роботу над проєктом, ви можете деактивувати віртуальне середовище. +Коли ви завершили роботу над проєктом, ви можете **деактивувати** віртуальне середовище.
@@ -443,6 +443,8 @@ $ deactivate Тепер ви готові почати працювати над вашим проєктом. + + /// tip | Порада Хочете зрозуміти, що це все було вище? @@ -455,33 +457,33 @@ $ deactivate Щоб працювати з FastAPI, вам потрібно встановити [Python](https://www.python.org/). -Після цього вам потрібно буде встановити FastAPI та інші пакети, які ви хочете використовувати. +Після цього вам потрібно буде **встановити** FastAPI та інші **пакети**, які ви хочете використовувати. Для встановлення пакетів зазвичай використовують команду `pip`, що постачається з Python (або схожі альтернативи). -Однак, якщо ви просто користуватиметеся `pip` напряму, пакети встановлюватимуться у ваше глобальне середовище Python (глобальну інсталяцію Python). +Однак, якщо ви просто користуватиметеся `pip` напряму, пакети встановлюватимуться у ваше **глобальне середовище Python** (глобальну інсталяцію Python). ### Проблема { #the-problem } То в чому ж проблема встановлення пакетів у глобальне середовище Python? -З часом ви, вірогідно, писатимете багато різних програм, які залежать від різних пакетів. І деякі з цих ваших проєктів залежатимуть від різних версій одного й того ж пакета. 😱 +З часом ви, вірогідно, писатимете багато різних програм, які залежать від **різних пакетів**. І деякі з цих ваших проєктів залежатимуть від **різних версій** одного й того ж пакета. 😱 -Наприклад, ви можете створити проєкт із назвою `philosophers-stone`, ця програма залежить від іншого пакета з назвою `harry`, використовуючи версію `1`. Тож вам потрібно встановити `harry`. +Наприклад, ви можете створити проєкт із назвою `philosophers-stone`, ця програма залежить від іншого пакета з назвою **`harry`, використовуючи версію `1`**. Тож вам потрібно встановити `harry`. ```mermaid flowchart LR stone(philosophers-stone) -->|requires| harry-1[harry v1] ``` -Потім, трохи згодом, ви створюєте інший проєкт із назвою `prisoner-of-azkaban`, і цей проєкт також залежить від `harry`, але йому потрібна версія `harry` `3`. +Потім, трохи згодом, ви створюєте інший проєкт із назвою `prisoner-of-azkaban`, і цей проєкт також залежить від `harry`, але йому потрібна **версія `harry` `3`**. ```mermaid flowchart LR azkaban(prisoner-of-azkaban) --> |requires| harry-3[harry v3] ``` -Але тепер проблема в тому, що якщо ви встановлюєте пакети глобально (у глобальне середовище), а не у локальне віртуальне середовище, вам доведеться вибирати, яку версію `harry` встановити. +Але тепер проблема в тому, що якщо ви встановлюєте пакети глобально (у глобальне середовище), а не у локальне **віртуальне середовище**, вам доведеться вибирати, яку версію `harry` встановити. Якщо ви хочете запустити `philosophers-stone`, вам спочатку потрібно встановити `harry` версії `1`, наприклад, так: @@ -517,7 +519,7 @@ $ pip install "harry==3" У підсумку у вас буде встановлено `harry` версії `3` у глобальному середовищі Python. -А якщо ви знову спробуєте запустити `philosophers-stone`, є шанс, що він не працюватиме, тому що йому потрібен `harry` версії `1`. +А якщо ви знову спробуєте запустити `philosophers-stone`, є шанс, що він **не працюватиме**, тому що йому потрібен `harry` версії `1`. ```mermaid flowchart LR @@ -536,13 +538,13 @@ flowchart LR /// tip | Порада -У пакетах Python дуже поширена практика намагатися якнайкраще уникати несумісних змін у нових версіях, але краще підстрахуватися та встановлювати новіші версії свідомо і тоді, коли ви можете запустити тести, щоб перевірити, що все працює коректно. +У пакетах Python дуже поширена практика намагатися якнайкраще **уникати несумісних змін** у **нових версіях**, але краще підстрахуватися та встановлювати новіші версії свідомо і тоді, коли ви можете запустити тести, щоб перевірити, що все працює коректно. /// -Тепер уявіть те саме з багатьма іншими пакетами, від яких залежать усі ваші проєкти. Це дуже складно керувати. І ви, імовірно, запускатимете деякі проєкти з деякими несумісними версіями пакетів і не розумітимете, чому щось не працює. +Тепер уявіть те саме з **багатьма** іншими **пакетами**, від яких залежать усі ваші **проєкти**. Це дуже складно керувати. І ви, імовірно, запускатимете деякі проєкти з деякими **несумісними версіями** пакетів і не розумітимете, чому щось не працює. -Також, залежно від вашої операційної системи (напр., Linux, Windows, macOS), у ній може бути вже встановлений Python. І в такому разі, імовірно, уже будуть попередньо встановлені деякі пакети з певними версіями, потрібними вашій системі. Якщо ви встановлюєте пакети в глобальне середовище Python, ви можете зламати деякі програми, що постачаються з вашою операційною системою. +Також, залежно від вашої операційної системи (напр., Linux, Windows, macOS), у ній може бути вже встановлений Python. І в такому разі, імовірно, уже будуть попередньо встановлені деякі пакети з певними версіями, **потрібними вашій системі**. Якщо ви встановлюєте пакети в глобальне середовище Python, ви можете **зламати** деякі програми, що постачаються з вашою операційною системою. ## Де встановлюються пакети { #where-are-packages-installed } @@ -564,17 +566,17 @@ $ pip install "fastapi[standard]" Це завантажить стиснений файл з кодом FastAPI, зазвичай із [PyPI](https://pypi.org/project/fastapi/). -Також будуть завантажені файли для інших пакетів, від яких залежить FastAPI. +Також будуть **завантажені** файли для інших пакетів, від яких залежить FastAPI. -Потім усе це буде розпаковано та покладено в каталог на вашому комп'ютері. +Потім усе це буде **розпаковано** та покладено в каталог на вашому комп'ютері. -Типово ці завантажені та розпаковані файли будуть покладені в каталог, що постачається з вашою інсталяцією Python, це глобальне середовище. +Типово ці завантажені та розпаковані файли будуть покладені в каталог, що постачається з вашою інсталяцією Python, це **глобальне середовище**. ## Що таке віртуальні середовища { #what-are-virtual-environments } -Рішенням проблеми з наявністю всіх пакетів у глобальному середовищі є використання віртуального середовища для кожного проєкту, над яким ви працюєте. +Рішенням проблеми з наявністю всіх пакетів у глобальному середовищі є використання **віртуального середовища для кожного проєкту**, над яким ви працюєте. -Віртуальне середовище - це каталог, дуже схожий на глобальний, у якому ви можете встановлювати пакети для конкретного проєкту. +Віртуальне середовище - це **каталог**, дуже схожий на глобальний, у якому ви можете встановлювати пакети для конкретного проєкту. Таким чином кожен проєкт матиме власне віртуальне середовище (каталог `.venv`) із власними пакетами. @@ -637,7 +639,7 @@ $ source .venv/Scripts/activate //// -Ця команда створить або змінить деякі [Змінні оточення](environment-variables.md), які будуть доступні для наступних команд. +Ця команда створить або змінить деякі [змінні оточення](environment-variables.md), які будуть доступні для наступних команд. Однією з цих змінних є змінна `PATH`. @@ -728,7 +730,7 @@ C:\Users\user\code\awesome-project\.venv\Scripts\python //// -Важлива деталь: шлях до віртуального середовища буде додано на початок змінної `PATH`. Система знайде його раніше за будь-який інший доступний Python. Таким чином, коли ви запускаєте `python`, використовується саме Python із віртуального середовища, а не будь-який інший `python` (наприклад, з глобального середовища). +Важлива деталь: шлях до віртуального середовища буде додано на **початок** змінної `PATH`. Система знайде його **раніше** за будь-який інший доступний Python. Таким чином, коли ви запускаєте `python`, використовується саме Python **із віртуального середовища**, а не будь-який інший `python` (наприклад, з глобального середовища). Активація віртуального середовища також змінює ще кілька речей, але це одна з найважливіших. @@ -764,11 +766,11 @@ C:\Users\user\code\awesome-project\.venv\Scripts\python //// -Це означає, що програма `python`, яка буде використана, знаходиться у віртуальному середовищі. +Це означає, що програма `python`, яка буде використана, знаходиться **у віртуальному середовищі**. На Linux і macOS використовують `which`, а в Windows PowerShell - `Get-Command`. -Принцип роботи цієї команди в тому, що вона перевіряє змінну оточення `PATH`, проходячи по кожному шляху по порядку, шукаючи програму з назвою `python`. Щойно вона її знайде, вона покаже вам шлях до цієї програми. +Принцип роботи цієї команди в тому, що вона перевіряє змінну оточення `PATH`, проходячи по **кожному шляху по порядку**, шукаючи програму з назвою `python`. Щойно вона її знайде, вона **покаже вам шлях** до цієї програми. Найважливіше, що коли ви викликаєте `python`, це рівно той «`python`», який буде виконаний. @@ -776,9 +778,9 @@ C:\Users\user\code\awesome-project\.venv\Scripts\python /// tip | Порада -Легко активувати одне віртуальне середовище, отримати один Python, а потім перейти до іншого проєкту. +Легко активувати одне віртуальне середовище, отримати один Python, а потім **перейти до іншого проєкту**. -І другий проєкт не працюватиме, бо ви використовуєте некоректний Python з віртуального середовища іншого проєкту. +І другий проєкт **не працюватиме**, бо ви використовуєте **некоректний Python** з віртуального середовища іншого проєкту. Корисно вміти перевіряти, який саме `python` використовується. 🤓 @@ -786,9 +788,9 @@ C:\Users\user\code\awesome-project\.venv\Scripts\python ## Навіщо деактивувати віртуальне середовище { #why-deactivate-a-virtual-environment } -Наприклад, ви працюєте над проєктом `philosophers-stone`, активували його віртуальне середовище, встановили пакети та працюєте з цим середовищем. +Наприклад, ви працюєте над проєктом `philosophers-stone`, **активували його віртуальне середовище**, встановили пакети та працюєте з цим середовищем. -А потім ви хочете працювати над іншим проєктом `prisoner-of-azkaban`. +А потім ви хочете працювати над **іншим проєктом** `prisoner-of-azkaban`. Ви переходите до цього проєкту: @@ -840,23 +842,23 @@ I solemnly swear 🐺 ## Альтернативи { #alternatives } -Це простий посібник, щоб ви швидко стартували та зрозуміли, як усе працює «під капотом». +Це простий посібник, щоб ви швидко стартували та зрозуміли, як усе працює **«під капотом»**. -Існує багато альтернатив керування віртуальними середовищами, залежностями пакетів (вимогами), проєктами. +Існує багато **альтернатив** керування віртуальними середовищами, залежностями пакетів (вимогами), проєктами. -Коли будете готові й захочете використовувати інструмент для керування всім проєктом, залежностями пакетів, віртуальними середовищами тощо, я раджу спробувати [uv](https://github.com/astral-sh/uv). +Коли будете готові й захочете використовувати інструмент для **керування всім проєктом**, залежностями пакетів, віртуальними середовищами тощо, я раджу спробувати [uv](https://github.com/astral-sh/uv). `uv` уміє багато чого, зокрема: -* Встановлювати Python для вас, включно з різними версіями -* Керувати віртуальним середовищем ваших проєктів -* Встановлювати пакети -* Керувати залежностями пакетів і версіями у вашому проєкті -* Гарантувати, що у вас є точний набір пакетів і версій для встановлення, включно з їхніми залежностями, щоб ви були певні, що зможете запустити ваш проєкт у продакшені точно так само, як і на вашому комп'ютері під час розробки - це називається блокуванням +* **Встановлювати Python** для вас, включно з різними версіями +* Керувати **віртуальним середовищем** ваших проєктів +* Встановлювати **пакети** +* Керувати **залежностями і версіями** пакетів у вашому проєкті +* Гарантувати, що у вас є **точний** набір пакетів і версій для встановлення, включно з їхніми залежностями, щоб ви були певні, що зможете запустити ваш проєкт у продакшені точно так само, як і на вашому комп'ютері під час розробки - це називається **блокуванням** * І багато іншого ## Висновок { #conclusion } -Якщо ви все це прочитали й зрозуміли, тепер ви знаєте значно більше про віртуальні середовища, ніж багато розробників. 🤓 +Якщо ви все це прочитали й зрозуміли, тепер **ви знаєте значно більше** про віртуальні середовища, ніж багато розробників. 🤓 -Знання цих деталей, найімовірніше, стане в пригоді в майбутньому, коли ви налагоджуватимете щось, що виглядає складним, але ви знатимете, як усе працює «під капотом». 😎 +Знання цих деталей, найімовірніше, стане в пригоді в майбутньому, коли ви налагоджуватимете щось, що виглядає складним, але ви знатимете, **як усе працює «під капотом»**. 😎