Re-translate with updated prompt

This commit is contained in:
Yurii Motov
2026-06-20 18:55:15 +02:00
parent ab057beddb
commit 71f3f0b6f0
8 changed files with 131 additions and 129 deletions

View File

@@ -6,11 +6,11 @@
दूसरों के पिछले काम के बिना **FastAPI** अस्तित्व में नहीं होता।
इससे पहले कई टूल बनाए गए हैं जिन्होंने इसके निर्माण को प्रेरित करने में मदद की।
इससे पहले कई tools बनाए गए हैं जिन्होंने इसके निर्माण को प्रेरित करने में मदद की।
मैं कई वर्षों तक एक नया framework बनाने से बचता रहा। पहले मैंने **FastAPI** द्वारा कवर क सभी विशेषताओं को कई अलग-अलग frameworks, plug-ins और tools का उपयोग करके हल करने की कोशिश की।
मैं कई वर्षों तक एक नया framework बनाने से बचता रहा। पहले मैंने **FastAPI** द्वारा कवर किए सभी features को कई अलग-अलग frameworks, plug-ins और tools का उपयोग करके हल करने की कोशिश की।
लेकिन एक समय ऐसा आया जब ऐसा कुछ बनाने के अलावा कोई विकल्प नहीं था जो ये सभी सुविधाएँ प्रदान करे, पिछले tools से सर्वोत्तम विचारों को लेकर, और उन्हें सबसे अच्छे तरीके से मिलाकर, उन language features का उपयोग करते हुए जो पहले उपलब्ध भी नहीं थे (Python 3.6+ type hints)।
लेकिन एक समय ऐसा आया जब ऐसा कुछ बनाने के अलावा कोई विकल्प नहीं था जो ये सभी features प्रदान करे, पिछले tools से सर्वोत्तम विचारों को लेकर, और उन्हें सबसे अच्छे तरीके से मिलाकर, उन language features का उपयोग करते हुए जो पहले उपलब्ध भी नहीं थे (Python 3.6+ type hints)।
## पिछले tools { #previous-tools }
@@ -20,7 +20,7 @@
यह relational databases (जैसे MySQL या PostgreSQL) के साथ अपेक्षाकृत tightly coupled है, इसलिए मुख्य store engine के रूप में NoSQL database (जैसे Couchbase, MongoDB, Cassandra, आदि) रखना बहुत आसान नहीं है।
इसे backend में HTML generate करने के लिए बनाया गया था, न कि किसी modern frontend (जैसे React, Vue.js और Angular) या इसके साथ संचार करने वाले अन्य systems (जैसे <abbr title="Internet of Things - इंटरनेट ऑफ थिंग्स">IoT</abbr> devices) द्वारा उपयोग की जाने वाली APIs बनाने के लिए।
इसे backend में HTML generate करने के लिए बनाया गया था, न कि किसी modern frontend (जैसे React, Vue.js और Angular) या इसके साथ संचार करने वाले अन्य systems (जैसे <abbr title="Internet of Things - चीज़ों का इंटरनेट">IoT</abbr> devices) द्वारा उपयोग की जाने वाली APIs बनाने के लिए।
### [Django REST Framework](https://www.django-rest-framework.org/) { #django-rest-framework }
@@ -50,7 +50,7 @@ Flask एक "microframework" है, इसमें database integrations य
क्योंकि यह बहुत सरल है, इसे सीखना अपेक्षाकृत सहज है, हालांकि documentation कुछ बिंदुओं पर थोड़ा technical हो जाता है।
इसका उपयोग आमतौर पर उन अन्य applications के लिए भी किया जाता है जिन्हें जरूरी नहीं कि database, user management, या Django में पहले से built-in आने वाल कई features की आवश्यकता हो। हालांकि इनमें से कई features plug-ins के साथ जोड़े जा सकते हैं।
इसका उपयोग आमतौर पर उन अन्य applications के लिए भी किया जाता है जिन्हें जरूरी नहीं कि database, user management, या Django में पहले से built-in आने वाल कई features की आवश्यकता हो। हालांकि इनमें से कई features plug-ins के साथ जोड़े जा सकते हैं।
Parts का यह decoupling, और एक "microframework" होना जिसे ठीक वही कवर करने के लिए extend किया जा सके जिसकी आवश्यकता है, एक key feature था जिसे मैं बनाए रखना चाहता था।
@@ -137,7 +137,7 @@ Custom schema के बजाय API specifications के लिए एक ope
### [Marshmallow](https://marshmallow.readthedocs.io/en/stable/) { #marshmallow }
API systems द्वारा आवश्यक मुख्य features में से एक data "<dfn title="मार्शलिंग, रूपांतरण भी कहा जाता है">serialization</dfn>" है, जिसमें code (Python) से data लेकर उसे ऐसी चीज़ में बदला जाता है जिसे network के माध्यम से भेजा जा सके। उदाहरण के लिए, database से data रखने वाले object को JSON object में बदलना। `datetime` objects को strings में बदलना, आदि।
API systems द्वारा आवश्यक मुख्य features में से एक data "<dfn title="marshalling, conversion भी कहा जाता है">serialization</dfn>" है, जिसमें code (Python) से data लेकर उसे ऐसी चीज़ में बदला जाता है जिसे network के माध्यम से भेजा जा सके। उदाहरण के लिए, database से data रखने वाले object को JSON object में बदलना। `datetime` objects को strings में बदलना, आदि।
APIs द्वारा आवश्यक एक और बड़ा feature data validation है, यह सुनिश्चित करना कि data निश्चित parameters के अनुसार valid है। उदाहरण के लिए, कोई field `int` है, कोई random string नहीं। यह incoming data के लिए विशेष रूप से उपयोगी है।
@@ -145,7 +145,7 @@ Data validation system के बिना, आपको सभी checks हा
ये features वही हैं जिन्हें प्रदान करने के लिए Marshmallow बनाया गया था। यह एक बेहतरीन library है, और मैंने पहले इसका बहुत उपयोग किया है।
लेकिन इसे Python type hints के अस्तित्व में आने से पहले बनाया गया था। इसलिए, हर <dfn title="डेटा कैसे बना होना चाहिए इसकी परिभाषा">schema</dfn> को define करने के लिए आपको Marshmallow द्वारा प्रदान किए गए specific utils और classes का उपयोग करना पड़ता है।
लेकिन इसे Python type hints के अस्तित्व में आने से पहले बनाया गया था। इसलिए, हर <dfn title="data कैसे बना होना चाहिए इसकी परिभाषा">schema</dfn> को define करने के लिए आपको Marshmallow द्वारा प्रदान किए गए specific utils और classes का उपयोग करना पड़ता है।
/// tip | **FastAPI** को इससे प्रेरणा मिली कि
@@ -155,7 +155,7 @@ Data validation system के बिना, आपको सभी checks हा
### [Webargs](https://webargs.readthedocs.io/en/latest/) { #webargs }
APIs द्वारा आवश्यक एक और बड़ा feature incoming requests से data <dfn title="Python डेटा में पढ़ना और बदलना">parsing</dfn> करना है।
APIs द्वारा आवश्यक एक और बड़ा feature incoming requests से data <dfn title="Python data में पढ़ना और बदलना">parsing</dfn> करना है।
Webargs एक tool है जिसे Flask सहित कई frameworks के ऊपर यह प्रदान करने के लिए बनाया गया था।
@@ -419,13 +419,13 @@ Pydantic Python type hints के आधार पर data validation, serializa
### [Starlette](https://www.starlette.dev/) { #starlette }
Starlette एक lightweight <dfn title="असिंक्रोनस Python web applications बनाने के लिए नया मानक">ASGI</dfn> framework/toolkit है, जो high-performance asyncio services बनाने के लिए ideal है।
Starlette एक lightweight <dfn title="asynchronous Python web applications बनाने के लिए नया standard">ASGI</dfn> framework/toolkit है, जो high-performance asyncio services बनाने के लिए ideal है।
यह बहुत simple और intuitive है। इसे आसानी से extensible होने और modular components रखने के लिए design किया गया है।
इसमें है:
* Seriously impressive performance.
* बहुत प्रभावशाली performance.
* WebSocket support.
* In-process background tasks.
* Startup और shutdown events.
@@ -434,7 +434,7 @@ Starlette एक lightweight <dfn title="असिंक्रोनस Python w
* Session और Cookie support.
* 100% test coverage.
* 100% type annotated codebase.
* Few hard dependencies.
* कुछ hard dependencies.
Starlette वर्तमान में tested सबसे तेज़ Python framework है। केवल Uvicorn ने इसे surpass किया है, जो framework नहीं, बल्कि server है।

View File

@@ -417,7 +417,7 @@ NodeJS / Browser JavaScript के previous versions में, आप "callback
जब आप किसी *path operation function* को `async def` के बजाय normal `def` के साथ declare करते हैं, तो इसे directly call करने के बजाय (क्योंकि यह server को block करेगा), एक external threadpool में run किया जाता है जिसे फिर awaited किया जाता है।
अगर आप किसी दूसरे async framework से आ रहे हैं जो ऊपर described तरीके से काम नहीं करता और आप tiny performance gain (लगभग 100 nanoseconds) के लिए trivial compute-only *path operation functions* को plain `def` के साथ define करने के आदी हैं, तो कृपया ध्यान दें कि **FastAPI** में effect बिल्कुल उल्टा होगा। इन cases में, `async def` use करना बेहतर है, जब तक कि आपके *path operation functions* ऐसा code use न करें जो blocking <abbr title="Input/Output - इनपुट/आउटपुट: डिस्क पढ़ना या लिखना, network communications.">I/O</abbr> perform करता हो।
अगर आप किसी दूसरे async framework से आ रहे हैं जो ऊपर described तरीके से काम नहीं करता और आप tiny performance gain (लगभग 100 nanoseconds) के लिए trivial compute-only *path operation functions* को plain `def` के साथ define करने के आदी हैं, तो कृपया ध्यान दें कि **FastAPI** में effect बिल्कुल उल्टा होगा। इन cases में, `async def` use करना बेहतर है, जब तक कि आपके *path operation functions* ऐसा code use न करें जो blocking <abbr title="Input/Output - इनपुट/आउटपुट: disk पढ़ना या लिखना, network संचार.">I/O</abbr> perform करता हो।
फिर भी, दोनों situations में, संभावना है कि **FastAPI** आपके previous framework से [फिर भी तेज़ होगा](index.md#performance) (या कम से कम comparable होगा)।

View File

@@ -1,22 +1,22 @@
# एडिटर सपोर्ट { #editor-support }
# Editor Support { #editor-support }
आधिकारिक [FastAPI Extension](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode) आपके FastAPI development workflow को *पाथ ऑपरेशन* discovery, navigation, साथ ही FastAPI Cloud deployment और live log streaming के साथ बेहतर बनाता है।
आधिकारिक [FastAPI Extension](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode) आपके FastAPI development workflow को *path operation* discovery, navigation, साथ ही FastAPI Cloud deployment और live log streaming के साथ बेहतर बनाता है।
Extension के बारे में अधिक जानकारी के लिए, [GitHub repository](https://github.com/fastapi/fastapi-vscode) पर README देखें।
## सेटअप और इंस्टॉलेशन { #setup-and-installation }
## Setup और Installation { #setup-and-installation }
**FastAPI Extension** [VS Code](https://code.visualstudio.com/) और [Cursor](https://www.cursor.com/) दोनों के लिए उपलब्ध है। इसे हर editor के Extensions panel से सीधे "FastAPI" खोजकर और **FastAPI Labs** द्वारा प्रकाशित extension चुनकर install किया जा सकता है। यह extension browser-based editors जैसे [vscode.dev](https://vscode.dev) और [github.dev](https://github.dev) में भी काम करता है।
### एप्लिकेशन डिस्कवरी { #application-discovery }
### Application Discovery { #application-discovery }
Default रूप से, extension आपके workspace में `FastAPI()` instantiate करने वाली files को scan करके FastAPI applications को अपने-आप discover करेगा। यदि auto-detection आपके project structure के लिए काम नहीं करता, तो आप `pyproject.toml` में `[tool.fastapi]` के माध्यम से या module notation (जैसे `myapp.main:app`) का उपयोग करके `fastapi.entryPoint` VS Code setting में entrypoint specify कर सकते हैं।
## फीचर्स { #features }
## Features { #features }
- **Path Operation Explorer** - आपके application में सभी <dfn title="रूट्स, एंडपॉइंट्स">*पाथ ऑपरेशन्स*</dfn> का sidebar tree view। किसी भी route या router definition पर जाने के लिए click करें।
- **Path Operation Explorer** - आपके application में सभी <dfn title="routes, endpoints">*path operations*</dfn> का sidebar tree view। किसी भी route या router definition पर जाने के लिए click करें।
- **Route Search** - <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>E</kbd> (macOS पर: <kbd>Cmd</kbd> + <kbd>Shift</kbd> + <kbd>E</kbd>) के साथ path, method, या name के आधार पर search करें।
- **CodeLens Navigation** - test client calls (जैसे `client.get('/items')`) के ऊपर clickable links, जो tests और implementation के बीच quick navigation के लिए matching *पाथ ऑपरेशन* पर ले जाते हैं।
- **CodeLens Navigation** - test client calls (जैसे `client.get('/items')`) के ऊपर clickable links, जो tests और implementation के बीच quick navigation के लिए matching *path operation* पर ले जाते हैं।
- **Deploy to FastAPI Cloud** - आपकी app को [FastAPI Cloud](https://fastapicloud.com/) पर one-click deployment।
- **Stream Application Logs** - level filtering और text search के साथ आपके FastAPI Cloud-deployed application से real-time log streaming।

View File

@@ -1,10 +1,10 @@
# FastAPI CLI { #fastapi-cli }
**FastAPI <abbr title="command line interface - कमांड लाइन इंटरफ़ेस">CLI</abbr>** एक command line प्रोग्राम है जिसका उपयोग आप अपने FastAPI ऐप को serve करने, अपने FastAPI प्रोजेक्ट को manage करने, और भी बहुत कुछ करने के लिए कर सकते हैं।
**FastAPI <abbr title="command line interface - कमांड लाइन इंटरफ़ेस">CLI</abbr>** एक command line प्रोग्राम है जिसका उपयोग आप अपने FastAPI ऐप को serve करने, अपने FastAPI project को manage करने, और भी बहुत कुछ करने के लिए कर सकते हैं।
जब आप FastAPI इंस्टॉल करते हैं (जैसे `pip install "fastapi[standard]"` के साथ), तो इसके साथ एक command line प्रोग्राम आता है जिसे आप terminal में चला सकते हैं।
जब आप FastAPI install करते हैं (जैसे `pip install "fastapi[standard]"` के साथ), तो इसके साथ एक command line प्रोग्राम आता है जिसे आप terminal में चला सकते हैं।
डेवलपमेंट के लिए अपना FastAPI ऐप चलाने के लिए, आप `fastapi dev` command का उपयोग कर सकते हैं:
development के लिए अपना FastAPI ऐप चलाने के लिए, आप `fastapi dev` command का उपयोग कर सकते हैं:
<div class="termy">
@@ -48,19 +48,19 @@ $ <font color="#4E9A06">fastapi</font> dev
/// tip | सुझाव
प्रोडक्शन के लिए आप `fastapi dev` की जगह `fastapi run` का उपयोग करेंगे। 🚀
production के लिए आप `fastapi dev` की जगह `fastapi run` का उपयोग करेंगे। 🚀
///
आंतरिक रूप से, **FastAPI CLI** [Uvicorn](https://www.uvicorn.dev) का उपयोग करता है, जो एक high-performance, production-ready, ASGI server है। 😎
`fastapi` CLI चलाने के लिए FastAPI ऐप को अपने-आप detect करने की कोशिश करेगा, यह मानते हुए कि यह `main.py` फ़ाइल में `app` नाम का object है (या कुछ अन्य variants में से कोई एक)।
`fastapi` CLI चलाने के लिए FastAPI ऐप को अपने-आप detect करने की कोशिश करेगा, यह मानते हुए कि यह `main.py` file में `app` नाम का object है (या कुछ अन्य variants में से कोई एक)।
लेकिन आप उपयोग किए जाने वाले ऐप को स्पष्ट रूप से configure कर सकते हैं।
## ऐप `entrypoint` को `pyproject.toml` में configure करें { #configure-the-app-entrypoint-in-pyproject-toml }
आप `pyproject.toml` फ़ाइल में यह configure कर सकते हैं कि आपका ऐप कहाँ स्थित है, जैसे:
आप `pyproject.toml` file में यह configure कर सकते हैं कि आपका ऐप कहाँ स्थित है, जैसे:
```toml
[tool.fastapi]

View File

@@ -6,7 +6,7 @@
### खुले मानकों पर आधारित { #based-on-open-standards }
* API बनाने के लिए [**OpenAPI**](https://github.com/OAI/OpenAPI-Specification), जिसमें <dfn title="इन्हें भी कहा जाता है: endpoints, routes">पाथ</dfn> <dfn title="इन्हें HTTP methods भी कहा जाता है, जैसे POST, GET, PUT, DELETE">ऑपरेशन्स</dfn>, parameters, request bodies, security, आदि की घोषणाएँ शामिल हैं।
* API बनाने के लिए [**OpenAPI**](https://github.com/OAI/OpenAPI-Specification), जिसमें <dfn title="इन्हें भी कहा जाता है: endpoints, routes">path</dfn> <dfn title="इन्हें HTTP methods भी कहा जाता है, जैसे POST, GET, PUT, DELETE">operations</dfn>, parameters, request bodies, security, आदि की घोषणाएँ शामिल हैं।
* [**JSON Schema**](https://json-schema.org/) के साथ automatic data model documentation (क्योंकि OpenAPI स्वयं JSON Schema पर आधारित है)।
* इन मानकों के इर्द-गिर्द डिज़ाइन किया गया, एक बहुत सावधानीपूर्वक अध्ययन के बाद। ऊपर से बाद में जोड़ी गई परत की तरह नहीं।
* यह कई भाषाओं में automatic **client code generation** का उपयोग करने की भी अनुमति देता है।
@@ -36,13 +36,13 @@ from datetime import date
from pydantic import BaseModel
# किसी वेरिएबल को str के रूप में घोषित करें
# और फ़ंक्शन के अंदर एडिटर सपोर्ट पाएँ
# किसी variable को str के रूप में घोषित करें
# और function के अंदर editor support पाएँ
def main(user_id: str):
return user_id
# एक Pydantic मॉडल
# एक Pydantic model
class User(BaseModel):
id: int
name: str
@@ -71,9 +71,9 @@ my_second_user: User = User(**second_user_data)
///
### एडिटर सपोर्ट { #editor-support }
### Editor support { #editor-support }
पूरे framework को उपयोग में आसान और सहज बनाने के लिए डिज़ाइन किया गया था, विकास शुरू करने से पहले ही सभी निर्णयों को कई editors पर test किया गया, ताकि सबसे अच्छा development experience सुनिश्चित किया जा सके।
पूरे framework को उपयोग में आसान और सहज बनाने के लिए डिज़ाइन किया गया था, development शुरू करने से पहले ही सभी निर्णयों को कई editors पर test किया गया, ताकि सबसे अच्छा development experience सुनिश्चित किया जा सके।
Python developer surveys में, यह स्पष्ट है [कि सबसे अधिक उपयोग की जाने वाली सुविधाओं में से एक "autocompletion" है](https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features)।
@@ -85,11 +85,11 @@ Python developer surveys में, यह स्पष्ट है [कि स
* [Visual Studio Code](https://code.visualstudio.com/) में:
![एडिटर सपोर्ट](https://fastapi.tiangolo.com/img/vscode-completion.png)
![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png)
* [PyCharm](https://www.jetbrains.com/pycharm/) में:
![एडिटर सपोर्ट](https://fastapi.tiangolo.com/img/pycharm-completion.png)
![editor support](https://fastapi.tiangolo.com/img/pycharm-completion.png)
आपको ऐसे code में completion मिलेगा जिसे आप पहले असंभव भी मान सकते थे। जैसे, किसी request से आने वाले JSON body (जो nested भी हो सकता था) के अंदर `price` key।
@@ -190,7 +190,7 @@ FastAPI में एक बेहद आसान, लेकिन बेहद
* **कोई brainfuck नहीं**:
* सीखने के लिए कोई नई schema definition micro-language नहीं।
* अगर आप Python types जानते हैं, तो आप जानते हैं कि Pydantic का उपयोग कैसे करना है।
* आपके **<abbr title="Integrated Development Environment - इंटीग्रेटेड डेवलपमेंट एनवायरनमेंट: code editor जैसा">IDE</abbr>/<dfn title="एक program जो code errors की जाँच करता है">लिंटर</dfn>/brain** के साथ अच्छी तरह काम करता है:
* आपके **<abbr title="Integrated Development Environment - एकीकृत development environment: code editor जैसा">IDE</abbr>/<dfn title="एक program जो code errors की जाँच करता है">linter</dfn>/brain** के साथ अच्छी तरह काम करता है:
* क्योंकि pydantic data structures केवल उन classes के instances होते हैं जिन्हें आप define करते हैं; auto-completion, linting, mypy और आपकी intuition, सभी आपके validated data के साथ सही ढंग से काम करने चाहिए।
* **Complex structures** validate करें:
* Hierarchical Pydantic models, Python `typing` के `List` और `Dict`, आदि का उपयोग।

View File

@@ -1,26 +1,26 @@
# इतिहास, डिज़ाइन और भविष्य { #history-design-and-future }
कुछ समय पहले, [एक **FastAPI** उपयोगकर्ता ने पूछा](https://github.com/fastapi/fastapi/issues/3#issuecomment-454956920):
कुछ समय पहले, [एक **FastAPI** user ने पूछा](https://github.com/fastapi/fastapi/issues/3#issuecomment-454956920):
> इस प्रोजेक्ट का इतिहास क्या है? ऐसा लगता है कि यह कुछ ही हफ्तों में कहीं से भी सीधे शानदार बन गया [...]
> इस project का इतिहास क्या है? ऐसा लगता है कि यह कुछ ही हफ्तों में कहीं से भी सीधे शानदार बन गया [...]
यहाँ उस इतिहास का एक छोटा सा हिस्सा है।
## विकल्प { #alternatives }
मैं कई वर्षों से जटिल आवश्यकताओं वाली APIs बना रहा हूँ (Machine Learning, distributed systems, asynchronous jobs, NoSQL databases, आदि), और डेवलपर्स की कई टीमों का नेतृत्व कर चुका हूँ।
मैं कई वर्षों से जटिल requirements वाली APIs बना रहा हूँ (Machine Learning, distributed systems, asynchronous jobs, NoSQL databases, आदि), और developers की कई teams का नेतृत्व कर चुका हूँ।
इसके हिस्से के रूप में, मुझे कई विकल्पों की जाँच, परीक्षण और उपयोग करना पड़ा।
**FastAPI** का इतिहास काफी हद तक इसके पूर्ववर्तियों का इतिहास है।
जैसा कि [विकल्प](alternatives.md) सेक्शन में कहा गया है:
जैसा कि [विकल्प](alternatives.md) section में कहा गया है:
<blockquote markdown="1">
दूसरों के पिछले काम के बिना **FastAPI** मौजूद नहीं होता।
इससे पहले कई टूल बनाए गए हैं जिन्होंने इसके निर्माण को प्रेरित करने में मदद की है।
इससे पहले कई tools बनाए गए हैं जिन्होंने इसके निर्माण को प्रेरित करने में मदद की है।
मैं कई वर्षों से एक नया framework बनाने से बचता रहा। पहले मैंने **FastAPI** द्वारा कवर किए गए सभी features को कई अलग-अलग frameworks, plug-ins और tools का उपयोग करके हल करने की कोशिश की।
@@ -30,7 +30,7 @@
## जाँच-पड़ताल { #investigation }
सभी पिछले विकल्पों का उपयोग करके मुझे उन सभी से सीखने, ideas लेने, और उन्हें अपने तथा जिन डेवलपर टीमों के साथ मैंने काम किया है उनके लिए सबसे अच्छे तरीके से मिलाने का अवसर मिला।
सभी पिछले विकल्पों का उपयोग करके मुझे उन सभी से सीखने, ideas लेने, और उन्हें अपने तथा जिन developer teams के साथ मैंने काम किया है उनके लिए सबसे अच्छे तरीके से मिलाने का अवसर मिला।
उदाहरण के लिए, यह स्पष्ट था कि आदर्श रूप से इसे standard Python type hints पर आधारित होना चाहिए।
@@ -52,13 +52,13 @@
सब कुछ इस तरह से किया गया कि सभी developers को सर्वोत्तम development experience मिल सके।
## आवश्यकताएँ { #requirements }
## Requirements { #requirements }
कई विकल्पों का परीक्षण करने के बाद, मैंने तय किया कि मैं इसके लाभों के लिए [**Pydantic**](https://docs.pydantic.dev/) का उपयोग करूँगा।
फिर मैंने इसमें योगदान दिया, ताकि इसे JSON Schema के साथ पूरी तरह compliant बनाया जा सके, constraint declarations को define करने के अलग-अलग तरीकों का समर्थन किया जा सके, और कई editors में tests के आधार पर editor support (type checks, autocompletion) को बेहतर बनाया जा सके।
Development के दौरान, मैंने [**Starlette**](https://www.starlette.dev/) में भी योगदान दिया, जो दूसरी मुख्य आवश्यकता थी।
Development के दौरान, मैंने [**Starlette**](https://www.starlette.dev/) में भी योगदान दिया, जो दूसरी मुख्य requirement थी।
## Development { #development }

View File

@@ -285,7 +285,7 @@ Official Pydantic docs से एक उदाहरण:
/// note | नोट
[Pydantic के बारे में अधिक जानने के लिए, इसके docs देखें](https://docs.pydantic.dev/)।
अधिक जानने के लिए [Pydantic, इसके docs देखें](https://docs.pydantic.dev/)।
///

View File

@@ -1,69 +1,69 @@
# वर्चुअल एनवायरनमेंट { #virtual-environments }
# Virtual Environments { #virtual-environments }
जब आप Python प्रोजेक्ट्स पर काम करते हैं, तो संभवतः आपको हर प्रोजेक्ट के लिए इंस्टॉल किए जाने वाले पैकेजों को अलग रखने के लिए एक **वर्चुअल एनवायरनमेंट** (या कोई समान तरीका) इस्तेमाल करना चाहिए।
जब आप Python projects पर काम करते हैं, तो संभवतः आपको हर project के लिए install किए जाने वाले packages को अलग रखने के लिए एक **virtual environment** (या कोई समान तरीका) इस्तेमाल करना चाहिए।
/// note | नोट
अगर आप पहले से वर्चुअल एनवायरनमेंट्स के बारे में जानते हैं, उन्हें कैसे बनाना और इस्तेमाल करना है जानते हैं, तो आप इस सेक्शन को छोड़ना चाह सकते हैं। 🤓
अगर आप पहले से virtual environments के बारे में जानते हैं, उन्हें कैसे बनाना और इस्तेमाल करना है जानते हैं, तो आप इस section को छोड़ना चाह सकते हैं। 🤓
///
/// tip | सुझाव
एक **वर्चुअल एनवायरनमेंट**, एक **एनवायरनमेंट वेरिएबल** से अलग होता है।
एक **virtual environment**, एक **environment variable** से अलग होता है।
एक **एनवायरनमेंट वेरिएबल** सिस्टम में एक वेरिएबल होता है जिसे प्रोग्राम इस्तेमाल कर सकते हैं।
एक **environment variable** system में एक variable होता है जिसे programs इस्तेमाल कर सकते हैं।
एक **वर्चुअल एनवायरनमेंट** एक डायरेक्टरी होती है जिसमें कुछ फाइलें होती हैं।
एक **virtual environment** एक directory होती है जिसमें कुछ files होती हैं।
///
/// note | नोट
यह पेज आपको **वर्चुअल एनवायरनमेंट्स** का उपयोग करना और वे कैसे काम करते हैं, सिखाएगा।
यह पेज आपको **virtual environments** का उपयोग करना और वे कैसे काम करते हैं, सिखाएगा।
अगर आप अपने लिए **सब कुछ मैनेज करने वाला टूल** अपनाने के लिए तैयार हैं (जिसमें Python इंस्टॉल करना भी शामिल है), तो [uv](https://github.com/astral-sh/uv) आज़माएँ।
अगर आप अपने लिए **सब कुछ manage करने वाला tool** अपनाने के लिए तैयार हैं (जिसमें Python install करना भी शामिल है), तो [uv](https://github.com/astral-sh/uv) आज़माएँ।
///
## एक प्रोजेक्ट बनाएँ { #create-a-project }
## Project बनाएँ { #create-a-project }
सबसे पहले, अपने प्रोजेक्ट के लिए एक डायरेक्टरी बनाएँ।
सबसे पहले, अपने project के लिए एक directory बनाएँ।
मैं सामान्यतः अपनी home/user डायरेक्टरी के अंदर `code` नाम की एक डायरेक्टरी बनाता हूँ।
मैं सामान्यतः अपनी home/user directory के अंदर `code` नाम की एक directory बनाता हूँ।
और उसके अंदर हर प्रोजेक्ट के लिए एक डायरेक्टरी बनाता हूँ।
और उसके अंदर हर project के लिए एक directory बनाता हूँ।
<div class="termy">
```console
// होम डायरेक्टरी में जाएँ
// home directory में जाएँ
$ cd
// अपने सभी कोड प्रोजेक्ट्स के लिए एक डायरेक्टरी बनाएँ
// अपने सभी code projects के लिए एक directory बनाएँ
$ mkdir code
// उस कोड डायरेक्टरी में जाएँ
// उस code directory में जाएँ
$ cd code
// इस प्रोजेक्ट के लिए एक डायरेक्टरी बनाएँ
// इस project के लिए एक directory बनाएँ
$ mkdir awesome-project
// उस प्रोजेक्ट डायरेक्टरी में जाएँ
// उस project directory में जाएँ
$ cd awesome-project
```
</div>
## वर्चुअल एनवायरनमेंट बनाएँ { #create-a-virtual-environment }
## Virtual Environment बनाएँ { #create-a-virtual-environment }
जब आप किसी Python प्रोजेक्ट पर **पहली बार** काम शुरू करते हैं, तो एक वर्चुअल एनवायरनमेंट **<dfn title="अन्य विकल्प भी हैं, यह एक सरल दिशानिर्देश है">अपने प्रोजेक्ट के अंदर</dfn>** बनाएँ।
जब आप किसी Python project पर **पहली बार** काम शुरू करते हैं, तो एक virtual environment **<dfn title="दूसरे विकल्प भी हैं, यह एक सरल guideline है">अपने project के अंदर</dfn>** बनाएँ।
/// tip | सुझाव
आपको यह **हर प्रोजेक्ट के लिए केवल एक बार** करना होता है, हर बार काम करते समय नहीं।
आपको यह **हर project के लिए केवल एक बार** करना होता है, हर बार काम करते समय नहीं।
///
//// tab | `venv`
वर्चुअल एनवायरनमेंट बनाने के लिए, आप Python के साथ आने वाले `venv` module का उपयोग कर सकते हैं।
Virtual environment बनाने के लिए, आप Python के साथ आने वाले `venv` module का उपयोग कर सकते हैं।
<div class="termy">
@@ -73,12 +73,12 @@ $ python -m venv .venv
</div>
/// details | उस कमांड का क्या अर्थ है
/// details | उस command का क्या अर्थ है
* `python`: `python` नाम के प्रोग्राम का उपयोग करें
* `python`: `python` नाम के program का उपयोग करें
* `-m`: किसी module को script की तरह call करें, अगला हम उसे बताएँगे कि कौन-सा module
* `venv`: `venv` नाम के module का उपयोग करें जो सामान्यतः Python के साथ इंस्टॉल आता है
* `.venv`: नई डायरेक्टरी `.venv` में वर्चुअल एनवायरनमेंट बनाएँ
* `venv`: `venv` नाम के module का उपयोग करें जो सामान्यतः Python के साथ install आता है
* `.venv`: नई directory `.venv` में virtual environment बनाएँ
///
@@ -86,7 +86,7 @@ $ python -m venv .venv
//// tab | `uv`
अगर आपके पास [`uv`](https://github.com/astral-sh/uv) इंस्टॉल है, तो आप इसका उपयोग वर्चुअल एनवायरनमेंट बनाने के लिए कर सकते हैं।
अगर आपके पास [`uv`](https://github.com/astral-sh/uv) install है, तो आप इसका उपयोग virtual environment बनाने के लिए कर सकते हैं।
<div class="termy">
@@ -98,29 +98,29 @@ $ uv venv
/// tip | सुझाव
डिफ़ॉल्ट रूप से, `uv` `.venv` नाम की डायरेक्टरी में वर्चुअल एनवायरनमेंट बनाएगा।
Default रूप से, `uv` `.venv` नाम की directory में virtual environment बनाएगा।
लेकिन आप डायरेक्टरी नाम के साथ एक अतिरिक्त argument देकर इसे customize कर सकते हैं।
लेकिन आप directory नाम के साथ एक अतिरिक्त argument देकर इसे customize कर सकते हैं।
///
////
वह कमांड `.venv` नाम की डायरेक्टरी में एक नया वर्चुअल एनवायरनमेंट बनाता है।
वह command `.venv` नाम की directory में एक नया virtual environment बनाता है।
/// details | `.venv` या कोई दूसरा नाम
आप वर्चुअल एनवायरनमेंट को किसी दूसरी डायरेक्टरी में बना सकते हैं, लेकिन इसे `.venv` कहने की एक convention है।
आप virtual environment को किसी दूसरी directory में बना सकते हैं, लेकिन इसे `.venv` कहने की एक convention है।
///
## वर्चुअल एनवायरनमेंट सक्रिय करें { #activate-the-virtual-environment }
## Virtual Environment activate करें { #activate-the-virtual-environment }
नए वर्चुअल एनवायरनमेंट को activate करें ताकि आप जो भी Python command चलाएँ या जो package install करें, वह इसका उपयोग करे।
नए virtual environment को activate करें ताकि आप जो भी Python command चलाएँ या जो package install करें, वह इसका उपयोग करे।
/// tip | सुझाव
प्रोजेक्ट पर काम करने के लिए **हर बार** जब आप एक **नया terminal session** शुरू करें, तो यह करें।
Project पर काम करने के लिए **हर बार** जब आप एक **नया terminal session** शुरू करें, तो यह करें।
///
@@ -166,17 +166,17 @@ $ source .venv/Scripts/activate
हर बार जब आप उस environment में कोई **नया package** install करें, तो environment को फिर से **activate** करें।
यह सुनिश्चित करता है कि अगर आप उस package द्वारा install किया गया कोई **terminal (<abbr title="command line interface - कमांड लाइन इंटरफ़ेस">CLI</abbr>) program** इस्तेमाल करते हैं, तो आप अपने वर्चुअल एनवायरनमेंट वाला ही उपयोग करें, कोई और नहीं जो global रूप से install हो सकता है, शायद आपकी ज़रूरत से अलग version के साथ।
यह सुनिश्चित करता है कि अगर आप उस package द्वारा install किया गया कोई **terminal (<abbr title="command line interface - कमांड लाइन इंटरफ़ेस">CLI</abbr>) program** इस्तेमाल करते हैं, तो आप अपने virtual environment वाला ही उपयोग करें, कोई और नहीं जो global रूप से install हो सकता है, शायद आपकी ज़रूरत से अलग version के साथ।
///
## जाँचें कि वर्चुअल एनवायरनमेंट सक्रिय है { #check-the-virtual-environment-is-active }
## जाँचें कि Virtual Environment Active है { #check-the-virtual-environment-is-active }
जाँचें कि वर्चुअल एनवायरनमेंट active है (पिछली command ने काम किया)।
जाँचें कि virtual environment active है (पिछली command ने काम किया)।
/// tip | सुझाव
यह **वैकल्पिक** है, लेकिन यह **जाँचने** का एक अच्छा तरीका है कि सब कुछ अपेक्षा के अनुसार काम कर रहा है और आप वही वर्चुअल एनवायरनमेंट इस्तेमाल कर रहे हैं जिसका आपने इरादा किया था।
यह **वैकल्पिक** है, लेकिन यह **जाँचने** का एक अच्छा तरीका है कि सब कुछ अपेक्षा के अनुसार काम कर रहा है और आप वही virtual environment इस्तेमाल कर रहे हैं जिसका आपने इरादा किया था।
///
@@ -192,7 +192,7 @@ $ which python
</div>
अगर यह `.venv/bin/python` पर `python` binary दिखाता है, आपके प्रोजेक्ट के अंदर (इस मामले में `awesome-project`), तो यह काम कर गया। 🎉
अगर यह `.venv/bin/python` पर `python` binary दिखाता है, आपके project के अंदर (इस मामले में `awesome-project`), तो यह काम कर गया। 🎉
////
@@ -208,11 +208,11 @@ C:\Users\user\code\awesome-project\.venv\Scripts\python
</div>
अगर यह `.venv\Scripts\python` पर `python` binary दिखाता है, आपके प्रोजेक्ट के अंदर (इस मामले में `awesome-project`), तो यह काम कर गया। 🎉
अगर यह `.venv\Scripts\python` पर `python` binary दिखाता है, आपके project के अंदर (इस मामले में `awesome-project`), तो यह काम कर गया। 🎉
////
## `pip` अपग्रेड करें { #upgrade-pip }
## `pip` Upgrade करें { #upgrade-pip }
/// tip | सुझाव
@@ -226,11 +226,11 @@ C:\Users\user\code\awesome-project\.venv\Scripts\python
/// tip | सुझाव
आप सामान्यतः यह **एक बार** करेंगे, वर्चुअल एनवायरनमेंट बनाने के ठीक बाद।
आप सामान्यतः यह **एक बार** करेंगे, virtual environment बनाने के ठीक बाद।
///
सुनिश्चित करें कि वर्चुअल एनवायरनमेंट active है (ऊपर वाली command से) और फिर चलाएँ:
सुनिश्चित करें कि virtual environment active है (ऊपर वाली command से) और फिर चलाएँ:
<div class="termy">
@@ -268,13 +268,13 @@ $ python -m ensurepip --upgrade
/// tip | सुझाव
अगर आपने वर्चुअल एनवायरनमेंट बनाने के लिए [`uv`](https://github.com/astral-sh/uv) का उपयोग किया है, तो यह आपके लिए पहले ही कर चुका है, आप यह step छोड़ सकते हैं। 😎
अगर आपने virtual environment बनाने के लिए [`uv`](https://github.com/astral-sh/uv) का उपयोग किया है, तो यह आपके लिए पहले ही कर चुका है, आप यह step छोड़ सकते हैं। 😎
///
/// tip | सुझाव
यह **एक बार** करें, वर्चुअल एनवायरनमेंट बनाने के ठीक बाद।
यह **एक बार** करें, virtual environment बनाने के ठीक बाद।
///
@@ -286,7 +286,7 @@ $ echo "*" > .venv/.gitignore
</div>
/// details | उस कमांड का क्या अर्थ है
/// details | उस command का क्या अर्थ है
* `echo "*"`: terminal में text `*` को "print" करेगा (अगला हिस्सा इसे थोड़ा बदल देता है)
* `>`: `>` के बाईं ओर वाली command द्वारा terminal में print की गई कोई भी चीज़ print नहीं होनी चाहिए, बल्कि `>` के दाईं ओर वाली file में लिखी जानी चाहिए
@@ -302,21 +302,21 @@ $ echo "*" > .venv/.gitignore
///
## Packages इंस्टॉल करें { #install-packages }
## Packages install करें { #install-packages }
Environment activate करने के बाद, आप उसमें packages install कर सकते हैं।
/// tip | सुझाव
जब आप अपने प्रोजेक्ट के लिए आवश्यक packages install या upgrade कर रहे हों, तो यह **एक बार** करें।
जब आप अपने project के लिए required packages install या upgrade कर रहे हों, तो यह **एक बार** करें।
अगर आपको किसी version को upgrade करना हो या कोई नया package जोड़ना हो, तो आप **यह फिर से करेंगे**
///
### सीधे Packages इंस्टॉल करें { #install-packages-directly }
### सीधे Packages install करें { #install-packages-directly }
अगर आप जल्दी में हैं और अपने प्रोजेक्ट की package requirements declare करने के लिए कोई file इस्तेमाल नहीं करना चाहते, तो आप उन्हें सीधे install कर सकते हैं।
अगर आप जल्दी में हैं और अपने project की package requirements declare करने के लिए कोई file इस्तेमाल नहीं करना चाहते, तो आप उन्हें सीधे install कर सकते हैं।
/// tip | सुझाव
@@ -353,7 +353,7 @@ $ uv pip install "fastapi[standard]"
////
### `requirements.txt` से इंस्टॉल करें { #install-from-requirements-txt }
### `requirements.txt` से install करें { #install-from-requirements-txt }
अगर आपके पास `requirements.txt` है, तो अब आप इसके packages install करने के लिए इसका उपयोग कर सकते हैं।
@@ -398,7 +398,7 @@ pydantic==2.8.0
## अपना Program चलाएँ { #run-your-program }
वर्चुअल एनवायरनमेंट activate करने के बाद, आप अपना program चला सकते हैं, और यह आपके वर्चुअल एनवायरनमेंट के अंदर मौजूद Python का उपयोग करेगा, उन packages के साथ जिन्हें आपने वहाँ install किया है।
Virtual environment activate करने के बाद, आप अपना program चला सकते हैं, और यह आपके virtual environment के अंदर मौजूद Python का उपयोग करेगा, उन packages के साथ जिन्हें आपने वहाँ install किया है।
<div class="termy">
@@ -410,9 +410,9 @@ Hello World
</div>
## अपना Editor कॉन्फ़िगर करें { #configure-your-editor }
## अपना Editor Configure करें { #configure-your-editor }
आप शायद एक editor का उपयोग करेंगे, सुनिश्चित करें कि आप इसे उसी वर्चुअल एनवायरनमेंट का उपयोग करने के लिए configure करें जिसे आपने बनाया है (यह शायद इसे autodetect कर लेगा), ताकि आपको autocompletion और inline errors मिल सकें।
आप शायद एक editor का उपयोग करेंगे, सुनिश्चित करें कि आप इसे उसी virtual environment का उपयोग करने के लिए configure करें जिसे आपने बनाया है (यह शायद इसे autodetect कर लेगा), ताकि आपको autocompletion और inline errors मिल सकें।
उदाहरण के लिए:
@@ -421,13 +421,13 @@ Hello World
/// tip | सुझाव
आपको सामान्यतः यह केवल **एक बार** करना होता है, जब आप वर्चुअल एनवायरनमेंट बनाते हैं।
आपको सामान्यतः यह केवल **एक बार** करना होता है, जब आप virtual environment बनाते हैं।
///
## वर्चुअल एनवायरनमेंट निष्क्रिय करें { #deactivate-the-virtual-environment }
## Virtual Environment deactivate करें { #deactivate-the-virtual-environment }
जब आप अपने प्रोजेक्ट पर काम कर लें, तो आप वर्चुअल एनवायरनमेंट को **deactivate** कर सकते हैं।
जब आप अपने project पर काम कर लें, तो आप virtual environment को **deactivate** कर सकते हैं।
<div class="termy">
@@ -437,11 +437,13 @@ $ deactivate
</div>
इस तरह, जब आप `python` चलाएँगे, तो यह वहाँ install packages वाले उस वर्चुअल एनवायरनमेंट से इसे चलाने की कोशिश नहीं करेगा।
इस तरह, जब आप `python` चलाएँगे, तो यह वहाँ install packages वाले उस virtual environment से इसे चलाने की कोशिश नहीं करेगा।
## काम करने के लिए तैयार { #ready-to-work }
अब आप अपने प्रोजेक्ट पर काम शुरू करने के लिए तैयार हैं।
अब आप अपने project पर काम शुरू करने के लिए तैयार हैं।
/// tip | सुझाव
@@ -451,7 +453,7 @@ $ deactivate
///
## वर्चुअल एनवायरनमेंट क्यों { #why-virtual-environments }
## Virtual Environments क्यों { #why-virtual-environments }
FastAPI के साथ काम करने के लिए आपको [Python](https://www.python.org/) install करना होगा।
@@ -481,7 +483,7 @@ flowchart LR
azkaban(prisoner-of-azkaban) --> |requires| harry-3[harry v3]
```
लेकिन अब समस्या यह है कि अगर आप packages को local **वर्चुअल एनवायरनमेंट** में install करने के बजाय globally (global environment में) install करते हैं, तो आपको चुनना होगा कि `harry` का कौन-सा version install करना है।
लेकिन अब समस्या यह है कि अगर आप packages को local **virtual environment** में install करने के बजाय globally (global environment में) install करते हैं, तो आपको चुनना होगा कि `harry` का कौन-सा version install करना है।
अगर आप `philosophers-stone` चलाना चाहते हैं, तो आपको पहले `harry` version `1` install करना होगा, उदाहरण के लिए:
@@ -542,9 +544,9 @@ Python packages में **नए versions** में **breaking changes स
अब, यही चीज़ उन **कई** अन्य **packages** के साथ कल्पना करें जिन पर आपके सभी **projects निर्भर करते हैं**। इसे manage करना बहुत कठिन है। और संभवतः आप कुछ projects को packages के कुछ **incompatible versions** के साथ चला देंगे, और यह नहीं जान पाएँगे कि कुछ काम क्यों नहीं कर रहा।
साथ ही, आपके operating system (जैसे Linux, Windows, macOS) के आधार पर, उसमें Python पहले से install आया हो सकता है। और उस मामले में संभवतः कुछ packages कुछ specific versions के साथ pre-installed होंगे जो **आपके system के लिए आवश्यक** हैं। अगर आप global Python environment में packages install करते हैं, तो आप अपने operating system के साथ आए कुछ programs को **break** कर सकते हैं।
साथ ही, आपके operating system (जैसे Linux, Windows, macOS) के आधार पर, उसमें Python पहले से install आया हो सकता है। और उस मामले में संभवतः कुछ packages कुछ specific versions के साथ pre-installed होंगे जो **आपके system के लिए required** हैं। अगर आप global Python environment में packages install करते हैं, तो आप अपने operating system के साथ आए कुछ programs को **break** कर सकते हैं।
## Packages कहाँ इंस्टॉल होते हैं { #where-are-packages-installed }
## Packages कहाँ install होते हैं { #where-are-packages-installed }
जब आप Python install करते हैं, तो यह आपके computer पर कुछ files वाली कुछ directories बनाता है।
@@ -570,13 +572,13 @@ $ pip install "fastapi[standard]"
Default रूप से, यह उन downloaded और extracted files को उस directory में रखेगा जो आपकी Python installation के साथ आती है, वही **global environment** है।
## वर्चुअल एनवायरनमेंट्स क्या हैं { #what-are-virtual-environments }
## Virtual Environments क्या हैं { #what-are-virtual-environments }
सभी packages को global environment में रखने की समस्याओं का समाधान है कि आप जिस भी project पर काम करते हैं उसके लिए **एक वर्चुअल एनवायरनमेंट** उपयोग करें।
सभी packages को global environment में रखने की समस्याओं का समाधान है कि आप जिस भी project पर काम करते हैं उसके लिए **एक virtual environment** उपयोग करें।
एक वर्चुअल एनवायरनमेंट एक **directory** है, global वाली के बहुत समान, जहाँ आप किसी project के लिए packages install कर सकते हैं।
एक virtual environment एक **directory** है, global वाली के बहुत समान, जहाँ आप किसी project के लिए packages install कर सकते हैं।
इस तरह, हर project का अपना वर्चुअल एनवायरनमेंट (`.venv` directory) होगा, अपने packages के साथ।
इस तरह, हर project का अपना virtual environment (`.venv` directory) होगा, अपने packages के साथ।
```mermaid
flowchart TB
@@ -595,9 +597,9 @@ flowchart TB
stone-project ~~~ azkaban-project
```
## वर्चुअल एनवायरनमेंट activate करने का क्या मतलब है { #what-does-activating-a-virtual-environment-mean }
## Virtual Environment activate करने का क्या मतलब है { #what-does-activating-a-virtual-environment-mean }
जब आप किसी वर्चुअल एनवायरनमेंट को activate करते हैं, उदाहरण के लिए:
जब आप किसी virtual environment को activate करते हैं, उदाहरण के लिए:
//// tab | Linux, macOS
@@ -647,7 +649,7 @@ $ source .venv/Scripts/activate
///
वर्चुअल एनवायरनमेंट activate करने से उसका path `.venv/bin` (Linux और macOS पर) या `.venv\Scripts` (Windows पर) `PATH` environment variable में जुड़ जाता है।
Virtual environment activate करने से उसका path `.venv/bin` (Linux और macOS पर) या `.venv\Scripts` (Windows पर) `PATH` environment variable में जुड़ जाता है।
मान लीजिए कि environment activate करने से पहले, `PATH` variable ऐसा दिखता था:
@@ -678,7 +680,7 @@ C:\Windows\System32
////
वर्चुअल एनवायरनमेंट activate करने के बाद, `PATH` variable कुछ ऐसा दिखेगा:
Virtual environment activate करने के बाद, `PATH` variable कुछ ऐसा दिखेगा:
//// tab | Linux, macOS
@@ -728,13 +730,13 @@ C:\Users\user\code\awesome-project\.venv\Scripts\python
////
एक महत्वपूर्ण detail यह है कि यह वर्चुअल एनवायरनमेंट path को `PATH` variable की **शुरुआत** में रखेगा। System इसे किसी भी अन्य उपलब्ध Python से **पहले** पाएगा। इस तरह, जब आप `python` चलाते हैं, तो यह किसी अन्य `python` (उदाहरण के लिए, global environment वाला `python`) के बजाय **वर्चुअल एनवायरनमेंट से** Python का उपयोग करेगा।
एक महत्वपूर्ण detail यह है कि यह virtual environment path को `PATH` variable की **शुरुआत** में रखेगा। System इसे किसी भी अन्य उपलब्ध Python से **पहले** पाएगा। इस तरह, जब आप `python` चलाते हैं, तो यह किसी अन्य `python` (उदाहरण के लिए, global environment वाला `python`) के बजाय **virtual environment से** Python का उपयोग करेगा।
वर्चुअल एनवायरनमेंट activate करने से कुछ और चीजें भी बदलती हैं, लेकिन यह उसके द्वारा की जाने वाली सबसे महत्वपूर्ण चीज़ों में से एक है।
Virtual environment activate करने से कुछ और चीजें भी बदलती हैं, लेकिन यह उसके द्वारा की जाने वाली सबसे महत्वपूर्ण चीज़ों में से एक है।
## वर्चुअल एनवायरनमेंट की जाँच करना { #checking-a-virtual-environment }
## Virtual Environment की जाँच करना { #checking-a-virtual-environment }
जब आप जाँचते हैं कि वर्चुअल एनवायरनमेंट active है या नहीं, उदाहरण के लिए:
जब आप जाँचते हैं कि virtual environment active है या नहीं, उदाहरण के लिए:
//// tab | Linux, macOS, Windows Bash
@@ -764,7 +766,7 @@ C:\Users\user\code\awesome-project\.venv\Scripts\python
////
इसका मतलब है कि जो `python` program उपयोग किया जाएगा, वह **वर्चुअल एनवायरनमेंट में** मौजूद है।
इसका मतलब है कि जो `python` program उपयोग किया जाएगा, वह **virtual environment में** मौजूद है।
आप Linux और macOS में `which` और Windows PowerShell में `Get-Command` का उपयोग करते हैं।
@@ -772,21 +774,21 @@ C:\Users\user\code\awesome-project\.venv\Scripts\python
सबसे महत्वपूर्ण हिस्सा यह है कि जब आप `python` call करते हैं, तो वही exact "`python`" execute होगा।
तो, आप confirm कर सकते हैं कि आप सही वर्चुअल एनवायरनमेंट में हैं या नहीं।
तो, आप confirm कर सकते हैं कि आप सही virtual environment में हैं या नहीं।
/// tip | सुझाव
एक वर्चुअल एनवायरनमेंट activate करना, एक Python पाना, और फिर **दूसरे project में चले जाना** आसान है।
एक virtual environment activate करना, एक Python पाना, और फिर **दूसरे project में चले जाना** आसान है।
और दूसरा project **काम नहीं करेगा** क्योंकि आप **गलत Python** का उपयोग कर रहे हैं, जो किसी दूसरे project के वर्चुअल एनवायरनमेंट से है।
और दूसरा project **काम नहीं करेगा** क्योंकि आप **गलत Python** का उपयोग कर रहे हैं, जो किसी दूसरे project के virtual environment से है।
यह check कर पाना उपयोगी है कि कौन-सा `python` उपयोग हो रहा है। 🤓
///
## वर्चुअल एनवायरनमेंट deactivate क्यों करें { #why-deactivate-a-virtual-environment }
## Virtual Environment deactivate क्यों करें { #why-deactivate-a-virtual-environment }
उदाहरण के लिए, आप `philosophers-stone` project पर काम कर रहे हो सकते हैं, **उस वर्चुअल एनवायरनमेंट को activate** करके, packages install करके और उस environment के साथ काम करके।
उदाहरण के लिए, आप `philosophers-stone` project पर काम कर रहे हो सकते हैं, **उस virtual environment को activate** करके, packages install करके और उस environment के साथ काम करके।
और फिर आप **किसी दूसरे project** `prisoner-of-azkaban` पर काम करना चाहते हैं।
@@ -800,7 +802,7 @@ $ cd ~/code/prisoner-of-azkaban
</div>
अगर आप `philosophers-stone` के लिए वर्चुअल एनवायरनमेंट को deactivate नहीं करते, तो जब आप terminal में `python` चलाएँगे, यह `philosophers-stone` से Python का उपयोग करने की कोशिश करेगा।
अगर आप `philosophers-stone` के लिए virtual environment को deactivate नहीं करते, तो जब आप terminal में `python` चलाएँगे, यह `philosophers-stone` से Python का उपयोग करने की कोशिश करेगा।
<div class="termy">
@@ -817,7 +819,7 @@ Traceback (most recent call last):
</div>
लेकिन अगर आप वर्चुअल एनवायरनमेंट deactivate करके `prisoner-of-azkaban` के लिए नया वाला activate करते हैं, तो जब आप `python` चलाएँगे, यह `prisoner-of-azkaban` में मौजूद वर्चुअल एनवायरनमेंट से Python का उपयोग करेगा।
लेकिन अगर आप virtual environment deactivate करके `prisoner-of-azkaban` के लिए नया वाला activate करते हैं, तो जब आप `python` चलाएँगे, यह `prisoner-of-azkaban` में मौजूद virtual environment से Python का उपयोग करेगा।
<div class="termy">
@@ -827,10 +829,10 @@ $ cd ~/code/prisoner-of-azkaban
// deactivate करने के लिए आपको पुरानी directory में होने की ज़रूरत नहीं है, आप जहाँ भी हों वहाँ से कर सकते हैं, दूसरे project में जाने के बाद भी 😎
$ deactivate
// prisoner-of-azkaban/.venv में वर्चुअल एनवायरनमेंट activate करें 🚀
// prisoner-of-azkaban/.venv में virtual environment activate करें 🚀
$ source .venv/bin/activate
// अब जब आप python चलाएँगे, तो यह इस वर्चुअल एनवायरनमेंट में install package sirius को पाएगा ✨
// अब जब आप python चलाएँगे, तो यह इस virtual environment में install package sirius को पाएगा ✨
$ python main.py
I solemnly swear 🐺
@@ -849,7 +851,7 @@ Virtual environments, package dependencies (requirements), projects को manag
`uv` बहुत सारी चीज़ें कर सकता है, यह कर सकता है:
* आपके लिए **Python install** करना, अलग-अलग versions सहित
* आपके projects के लिए **वर्चुअल एनवायरनमेंट** manage करना
* आपके projects के लिए **virtual environment** manage करना
* **Packages** install करना
* आपके project के लिए package **dependencies और versions** manage करना
* सुनिश्चित करना कि आपके पास install करने के लिए packages और versions का **exact** set हो, उनकी dependencies सहित, ताकि आप सुनिश्चित हो सकें कि आप अपने project को production में ठीक उसी तरह चला सकते हैं जैसे development के दौरान अपने computer पर चलाते हैं, इसे **locking** कहा जाता है
@@ -857,6 +859,6 @@ Virtual environments, package dependencies (requirements), projects को manag
## निष्कर्ष { #conclusion }
अगर आपने यह सब पढ़ा और समझा है, तो अब **आप वर्चुअल एनवायरनमेंट्स के बारे में** वहाँ मौजूद कई developers से कहीं ज़्यादा जानते हैं। 🤓
अगर आपने यह सब पढ़ा और समझा है, तो अब **आप virtual environments के बारे में** वहाँ मौजूद कई developers से कहीं ज़्यादा जानते हैं। 🤓
इन details को जानना भविष्य में उस समय बहुत संभवतः उपयोगी होगा जब आप किसी ऐसी चीज़ को debug कर रहे होंगे जो complex लगती है, लेकिन आपको पता होगा कि **यह सब अंदर से कैसे काम करता है**। 😎