- Python इंस्टॉल और virtual environment management को क्रांतिकारी रूप से सरल बनाने वाला uv, Python इकोसिस्टम की जटिल environment setup समस्याओं को हल करता है
- Rust में लिखा गया यह टूल speed और stability दोनों देता है, और Python version installation, package management, तथा dependency resolution को एक ही कमांड में संभालता है
- यह
pyproject.tomlको अपने आप पहचानकर project environment configure करता है, औरuv syncके जरिए टीमों के बीच पूरी तरह एक जैसा development environment दोबारा बनाया जा सकता है uv run,uv add,uvxजैसी कमांड्स के माध्यम से virtual environment activate किए बिना execution, package जोड़ना, और one-off execution संभव है- Python installation और execution consistency सुनिश्चित करके, uv को developer productivity और collaboration efficiency को बहुत बढ़ाने वाले turning point के रूप में देखा जा रहा है
uv का अवलोकन
- uv, Astral द्वारा विकसित एक मुफ़्त open source Python management tool है, जिसका उद्देश्य जटिल environment setup प्रक्रिया को सरल बनाना है
- Astral वही टीम है जिसने Ruff जैसे Python development tools बनाए हैं
- uv Python version installation, package installation, virtual environment management, और dependency resolution को सपोर्ट करता है, और speed के मामले में मौजूदा tools से काफी तेज़ है
- यह Rust में विकसित किया गया है, इसलिए performance बहुत शानदार है, और macOS, Linux, Windows सहित लगभग सभी platforms पर काम करता है
इंस्टॉलेशन और बुनियादी उपयोग
- इंस्टॉलेशन बहुत आसान है, और
curlया PowerShell की एक लाइन कमांड से किया जा सकता है- Linux/Mac:
curl -LsSf https://astral.sh/uv/install.sh | sh - Windows:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
- Linux/Mac:
- क्योंकि यह मौजूदा Python installation को बदलता नहीं है, इसलिए इसे सुरक्षित रूप से आज़माया जा सकता है
प्रोजेक्ट environment management
- uv हर Python project के लिए virtual environment को अपने आप manage करता है, और
pyproject.tomlफ़ाइल को पहचानकर environment सेट करता हैpyproject.tomlमें Python version, dependencies की सूची, project name और version आदि परिभाषित किए जाते हैं- उदाहरण:
[project] name = "my_project" version = "1.0.0" requires-python = ">=3.9,<3.13" dependencies = ["astropy>=5.0.0", "pandas>=1.0.0,<2.0"] - यह तरीका pip की तुलना में ज़्यादा स्पष्ट और standardized environment definition देता है
नया project बनाना
uv initकमांड से नया project आसानी से बनाया जा सकता है- यह अपने आप
pyproject.toml,README.mdजैसी ज़रूरी फ़ाइलें बनाता है --bare,--packageजैसे options के साथ अलग-अलग initialization forms को सपोर्ट करता हैuv init --helpसे विस्तृत options देखे जा सकते हैं
- यह अपने आप
मौजूदा project को sync करना
- यदि project में
pyproject.tomlहै, तोuv syncकमांड से इसे तुरंत इस्तेमाल किया जा सकता है- Python version अपने आप install हो जाता है
.venvdirectory में virtual environment बनता है- सभी packages की सटीक version information रिकॉर्ड करने वाला
uv.lockबनाया जाता है
uv runकमांड का इस्तेमाल करने पर environment को activate किए बिना भी Python script चलाई जा सकती है- उदाहरण:
uv run myscript.py,uv run jupyter lab
- उदाहरण:
dependencies और Python version management
uv add numpy>=2.0कमांड से dependency को अपने आप जोड़ना और manage करना संभव हैpyproject.tomlको सीधे edit करने की ज़रूरत नहीं पड़ती
uv python pin 3.12.9कमांड से किसी खास Python version को pin किया जा सकता है, जिससे environment reproducibility सुनिश्चित होती है
uvx: तेज़ one-off execution
uvxऐसी कमांड है जो अलग environment setup के बिना tools को तुरंत चला सकती है- उदाहरण:
uvx ruff,uvx jupyter lab,uvx --with pandas,pyarrow ipython - cache आधारित होने के कारण इसे दोबारा बहुत तेज़ी से चलाया जा सकता है, इसलिए यह experimental कामों के लिए उपयोगी है
- उदाहरण:
- इसकी वजह से developers virtual environment से बँधे बिना अस्थायी execution environment आसानी से तैयार कर सकते हैं
अगर अब भी यह आपको पर्याप्त प्रभावशाली नहीं लगता: एक व्यक्तिगत नोट
- The Astrosky Ecosystem के विकास के दौरान कई OS पर Python environments को एकसमान बनाने के लिए uv अपनाया गया
- इसने सभी developers और servers को पूरी तरह एक जैसी Python installation और dependency versions इस्तेमाल करने में मदद की
- GitHub Actions और production server environments में भी uv Python environment को manage करता है
- uv की वजह से installation और test environment mismatch की समस्या खत्म हो गई, और developers के बीच collaboration सरल हो गया
निष्कर्ष
- uv Python installation और management की जटिलता को बुनियादी स्तर पर दूर करता है, और developers को एक ही environment में भरोसेमंद तरीके से सहयोग करने देता है
- अपनी तेज़ speed और Rust-आधारित stability के कारण, uv को “पिछले 10 वर्षों में Python इकोसिस्टम में हुई सबसे बड़ी क्रांति” कहा जा रहा है
7 टिप्पणियां
मुझे लगा था कि pdm, uv से लगभग काफ़ी मिलता-जुलता है, लेकिन pdm के बारे में ज़्यादा बात नहीं हो रही है।
ML और Web में इसे अच्छी तरह इस्तेमाल कर रहा हूँ, और उम्मीद है कि uv जल्दी ही एक उबाऊ तकनीक बन जाए, हाहा
लगता है कि अब
uvसे जुड़ी पोस्टों की सामग्री में ज़्यादा बदलाव नहीं आता।Maven और Gradle भी..
अब अगर कोई ऐसा repo दिखता है जिसमें सिर्फ
requirementsहो औरpyproject.tomlन हो, तो वह काफ़ी पुराना लगता है, हाहा;Hacker News राय
पहले सुनता था कि Python की tooling काफ़ी है, लेकिन अब जब Python डेवलपर्स npm, cargo, bundler जैसे lockfile-आधारित ecosystem का अनुभव करके उसके फ़ायदे समझ रहे हैं, तो अच्छा लगता है
npm में भी समस्याएँ हैं, लेकिन consistent installs और lock files वाकई शानदार विचार हैं
यह हैरानी की बात है कि इतने लंबे समय तक environment management इतना असुविधाजनक रहा
पता नहीं इतने सारे प्रयास सिर्फ़ package management की कठिनाई की वजह से असफल हुए, या फिर VC funding की ज़रूरत थी
pip freeze > requirements.txtऔरpip install -r requirements.txtइस्तेमाल करता आया हूँअगर version ranges न लिखें, तो requirements.txt लगभग lockfile की भूमिका निभाता है
इसलिए आजकल के ‘official lockfile’ उत्साह को थोड़ा बढ़ा-चढ़ाकर देखा गया लगता है
मेरा मानना है कि yarn आने के बाद npm में बड़ा सुधार हुआ
यह ज़्यादा तेज़, efficient और deterministic है
विवरण के लिए pnpm.io/motivation देखें
UV scripts की मदद से MCP client/server को single file के रूप में distribute किया जा सका
संबंधित लेख: MCP server in a file
ज़्यादातर scripts single file होती हैं, इसलिए ऊपर यह code जोड़ देने से ज़िंदगी बहुत आसान हो जाती है
#!/usr/bin/env -S uv run --scriptइससे script एक standalone executable की तरह काम करती है, और uv ज़रूरी modules अपने-आप install कर देता है
क्योंकि script लिखने वाला malicious dependency छिपा सकता है
अगर whitelist feature हो तो अच्छा होगा
हालाँकि कुछ packages release date detect नहीं कर पाते (जैसे: yaml)
/usr/bin/env -Sका support होना चाहिए, और dependency names मेंuv pip installcommand में इस्तेमाल होने वाले distribution package names लिखने होते हैंयह PEP 723 standard है, और pipx भी इसे support करता है
uv इस्तेमाल करने से पहले मुझे Rust में दिलचस्पी नहीं थी, लेकिन uv की वजह से performance-sensitive code को Rust में ले जाने लगा हूँ
काश conda पूरी तरह गायब हो जाए। ML clusters में conda environments बहुत बड़े हो जाते हैं और reproducibility भी कम होती है
पहले pyenv + venv + pip + pipx का combination मेरे लिए काफ़ी संतोषजनक था, लेकिन uv में
uv run,uv addआदि से usability काफ़ी बेहतर हो गई हैenvironment activate करने के बजाय command के आगे
uvलगा देना कहीं ज़्यादा सुविधाजनक हैPython version management भी आसान हो जाता है, और project के हिसाब से batteries-included जैसा एहसास मिलता है
अभी लंबी अवधि की stability के बारे में नहीं जानता, लेकिन नए projects में इसे default की तरह इस्तेमाल कर रहा हूँ
कुछ लोगों को uv का environment auto-detect करना पसंद नहीं आता
Python version management की अहमियत मुझे पूरी तरह समझ नहीं आती, लेकिन uv से environment फिर से बनाना बहुत तेज़ हो जाता है
uvलगाने से commands stateless तरीके से चलाई जा सकती हैं, जो collaboration में सुविधाजनक हैuvprefix फिर भी उपयोगी है.venvहटा दोयह blog post मेरे अनुभव से लगभग पूरी तरह मेल खाती है
friction कम हुई है और चीज़ें सरल हुई हैं
उम्मीद है कि Python community uv को default tool के रूप में अपनाएगी
Rust-आधारित tools ने feedback speed को पूरी तरह बदल दिया है
लेकिन यह जानने की जिज्ञासा है कि Astral कमाई कैसे करेगा। उसने funding भी ली है, लेकिन कोई paid product नहीं है
उदाहरण: internal package registry
संबंधित इंटरव्यू: Charlie Marsh इंटरव्यू
अगर Python developers की संख्या 1 करोड़ है, तो uv भी काफ़ी अच्छी तरह monetize हो सकता है
व्यक्तिगत रूप से मुझे लगता है कि type annotations और GIL removal uv से ज़्यादा महत्वपूर्ण हैं
uv अभी शुरुआती चरण में है, इसलिए इसमें कुछ असुविधाएँ भी हैं। आख़िरकार यह भी एक package manager ही है
pip का नया resolver और wheel distributions की बढ़ती संख्या ने इसमें बड़ी भूमिका निभाई है
संबंधित लेख: Wheels are faster for pure Python
इसका Rust में लिखा होना भी दिलचस्प है। LLVM की तरह इसकी संरचना दूसरे languages को भी support कर सकती है
end-user के नज़रिये से uv कहीं बेहतर है, और अगर maintainers को असुविधा है तो उन्हें feedback देना चाहिए
अगर strict mode आए तो performance improvement भी संभव है, लेकिन वह language philosophy से टकराएगा
फिर भी अगर conda गायब हो जाए, तो मैं uv पर जाने को तैयार हूँ
मुझे व्यक्तिगत रूप से uv पसंद नहीं है
uv pipइस्तेमाल करना पड़ता है, इसलिए यह पूरा replacement भी नहीं हैलेकिन pip और venv भी अक्सर टूट जाते हैं और debug करना और मुश्किल बना देते हैं
uv, ruff को replace नहीं करता
environment variables को छेड़ने की भी ज़रूरत नहीं है
uv pipवास्तव में pip को call नहीं करता, बल्कि compatible interface देता हैव्यवहार में uv, pip को replace ही करता है
Docker compatibility की समस्या से आपका मतलब ख़ास तौर पर क्या है, यह जानना चाहूँगा
uv add,uv sync,uv runसे manage करना कहीं ज़्यादा ergonomic और तेज़ हैविस्तार से पढ़ने के लिए uv dependencies concepts देखें
uv तेज़ है, यह तो अच्छी बात है, लेकिन कभी-कभी लगता है कि अगर इसे
pipको बेहतर बनाने की दिशा में ले जाया गया होता तो कैसा रहता।