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 прямо з браузера. - + * Альтернативна документація 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/): - + * у [PyCharm](https://www.jetbrains.com/pycharm/): - + -Ви отримаєте автодоповнення в коді, який раніше могли вважати навіть неможливим. Наприклад, для ключа `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».-
«Я дуже часто використовую FastAPI останнім часом. Я насправді планую використовувати його для всіх ML-сервісів моєї команди в Microsoft. Деякі з них інтегруються до основного продукту Windows і деяких продуктів Office».+
«Ми прийняли бібліотеку FastAPI, щоб запустити сервер REST, до якого можна надсилати запити для отримання прогнозів». [для Ludwig]-
«Netflix із задоволенням оголошує про випуск з відкритим кодом нашого фреймворку оркестрації керування кризами: Dispatch!» [побудовано з FastAPI]-
«Якщо хтось хоче створювати продакшн-API на Python, я дуже рекомендую FastAPI. Він чудово спроєктований, простий у використанні і дуже масштабований — він став ключовим компонентом у нашій стратегії розробки з пріоритетом API».-
«Якщо хтось хоче створювати продакшн-API на Python, я дуже рекомендую FastAPI. Він чудово спроєктований, простий у використанні і дуже масштабований - він став ключовим компонентом у нашій стратегії розробки з пріоритетом API».+
-Зверніть увагу, що це означає: «`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 }
-Коли ви завершили роботу над проєктом, ви можете деактивувати віртуальне середовище.
+Коли ви завершили роботу над проєктом, ви можете **деактивувати** віртуальне середовище.