Rust में लिखा गया बेहद तेज़ Python package और project manager uv
(github.com/astral-sh)- uv एक Rust-आधारित बेहद तेज़ Python package और project management tool है
- यह pip, pip-tools, pipx, poetry, pyenv, virtualenv आदि को एक साथ replace कर सकता है
- अधिकतम 10~100 गुना तेज़ performance, disk space की बचत, मज़बूत cache और cross-platform support देता है
- scripts, projects, tools, और कई Python versions के management सहित integrated development environment support features शामिल हैं
- development productivity, large-scale projects, और तेज़ work speed के लिए optimized modern Python development workflow को संभव बनाता है
ओपन सोर्स परिचय और अलग पहचान वाले बिंदु
- uv मौजूदा pip, pip-tools, pipx, poetry, pyenv, virtualenv, twine जैसे कई Python management tools की क्षमताओं को एक single tool में integrate करता है
- Rust में विकसित होने के कारण इसका performance बेहद उत्कृष्ट है, और पारंपरिक pip की तुलना में 10~100 गुना तेज़ installation और synchronization speed देता है
- global cache और dependency deduplication के ज़रिए disk usage optimization प्रदान करता है, साथ ही intuitive CLI और परिचित pip compatibility भी देता है
- macOS, Linux, Windows जैसे विभिन्न platforms पर standalone executable के रूप में install किया जा सकता है
- standalone installation, pip और pipx integration, और built-in auto update support जैसी बेहतर convenience इसकी विशेषताएँ हैं
मुख्य विशेषताएँ (Highlights)
- एक ही uv tool से pip, pip-tools, pipx, poetry, pyenv, twine, virtualenv आदि की कई क्षमताओं को replace किया जा सकता है
- मौजूदा pip की तुलना में 10~100 गुना तेज़ install/update/sync performance प्रदान करता है
- lockfile-based project dependency management और workspaces, universal lockfile support
- script dependencies की inline declaration और automatic isolated environment execution feature
- कई तरह के Python version management/install/switching का support
- Python package के रूप में वितरित tools को run और install करने का support (pipx replacement)
- pip interface compatibility और अतिरिक्त features (version override, platform-independent resolution आदि)
- Cargo-style workspace के साथ large-scale projects के लिए optimized
- global cache से dependency duplication कम होती है और disk space efficient बनता है
- Rust/Python environment के बिना भी curl या pip, pipx से install और उपयोग संभव
- macOS, Linux, Windows सहित multi-platform support
- Astral और Ruff बनाने वाली टीम द्वारा विकसित
प्रोजेक्ट मैनेजमेंट (Project Management)
- project level पर dependencies, environment, lock files, workspace आदि का पूरा support
uv initcommand से project auto initialization और virtualenv creationuv addसे dependency जोड़ना, औरuv lockतथाuv synccommands से package synchronization और security audit को automatic तरीके से handle करना- Poetry, Rye जैसे आधुनिक Python project management tools की क्षमताओं को replace करते हुए और तेज़ processing performance सुनिश्चित करता है
- uv से manage न किए गए projects के build और publish का भी support
स्क्रिप्ट मैनेजमेंट (Scripts)
- single-file scripts में dependency inline metadata declaration संभव
- script run होने पर automatic virtual environment isolation और dependency installation support
uv add --scriptसे script-specific dependencies manage करना, औरuv runcommand से isolated environment में execution- data science/automation जैसी one-off scripts के उपयोग के लिए optimized
टूल मैनेजमेंट (Tools)
- Python package format वाले CLI tools को pipx की तरह install और run किया जा सकता है
uv tool install,uvxcommands से temporary environment या global execution का उपयोग- installed tools की जाँच, version management, और updates का support
Python version management
- कई Python versions को आसानी से install और तुरंत switch किया जा सकता है
- कई versions को parallel manage किया जा सकता है, और project-specific
.python-versionpin setting संभव है - pypy जैसे alternative implementations के लिए भी वही interface support
uv python install/pinजैसे commands से version install, assign, और activate करना
pip interface (Pip Interface)
uv pip,uv venvके ज़रिए मौजूदा pip, pip-tools, virtualenv को पूरी तरह replace किया जा सकता है- dependency version override, platform-independent resolution, reproducible builds जैसी advanced features शामिल हैं
- मौजूदा workflow बदले बिना pip drop-in replacement के रूप में काम करता है और 10~100 गुना performance improvement देता है
- requirements.in → requirements.txt conversion, virtual environment creation, और requirements synchronization का support
प्लेटफ़ॉर्म और version policy
- विभिन्न operating systems (Windows, macOS, Linux) का support
- policy और supported platforms की जानकारी आधिकारिक documentation में देखी जा सकती है
योगदान (Contributing)
- शुरुआती contributors से लेकर experts तक, सभी तरह के contributors को support करने का लक्ष्य है, और संबंधित guides उपलब्ध हैं
FAQ
- uv का उच्चारण “यू-वी” है
- style हमेशा lowercase “uv” ही रहता है
तकनीकी पृष्ठभूमि और आभार (Acknowledgements)
- dependency resolution algorithm के लिए PubGrub का उपयोग किया गया है
- Git implementation Cargo पर आधारित है
- optimization strategy को pnpm, Orogene, Bun, Posy जैसे आधुनिक packaging tools से काफी प्रेरणा मिली है
लाइसेंस
- MIT और Apache-2.0 में से किसी एक को चुना जा सकता है
- योगदान किया गया code भी इन्हीं शर्तों के तहत dual-licensed होता है
1 टिप्पणियां
Hacker News टिप्पणियाँ
कुछ महीने पहले तक मैं सोचता था कि मैं uv कभी इस्तेमाल नहीं करूंगा, क्योंकि मैं पहले से venv और pip का आदी था और मुझे नहीं लगता था कि किसी और टूल की जरूरत है। लेकिन हाल में एक shared server पर, जहाँ root access नहीं था, तरह-तरह के package और driver पूरी तरह टूटे हुए थे और मुझे pytorch चाहिए था। उस अनुभव के बाद मैं पूरी तरह uv पर आ गया। pip में बहुत समय लगता था, cache बहुत जगह घेरता था और उसकी location बदलना भी आसान नहीं था। uv पर आने के बाद सब कुछ बहुत अच्छे से चला, इसलिए मैं काफी संतुष्ट हूँ। अगर आप अभी भी हिचक रहे हैं, तो कम से कम 5 मिनट के लिए इसे ज़रूर आज़माएँ।
uv venvचलाइए और काम हो जाता है।uv run,uv add,uv syncयाद रखना होता है, इसलिए टीम के लोग भी इसे कहीं कम बोझिल मानते हैं।जब मैंने पहली बार uv इस्तेमाल किया, तो pip की तुलना में यह इतना तेज़ खत्म हुआ कि मुझे लगा शायद कुछ गड़बड़ हुई है या यह ठीक से चला ही नहीं।
मुझे लगता है uv और ruff उस कहावत के शानदार counterexample हैं कि "कभी wheel को दोबारा मत बनाओ"। अगर उद्देश्य साफ़ हो, तो कभी-कभी मौजूदा चीज़ से कहीं बेहतर नतीजा निकल सकता है।
छोटे या low-spec systems पर, जैसे AWS T2.micro पर Windows, uv बहुत ज्यादा concurrent downloads शुरू कर देता है और timeout हो जाता है। environment variable
UV_CONCURRENT_DOWNLOADSसे concurrent download count को 1~2 तक सीमित करने पर समस्या हल हो जाती है। मुझे लगता है uv की default setting कुछ ज्यादा aggressive है। अच्छा होगा अगर यह server के हिसाब से threads अपने-आप tune करे, शायद download speed का उपयोग करके।हाल में मैं अपने laptop पर personal use के लिए uv आज़मा रहा हूँ, और pip का आदी होने के कारण इसकी महसूस होने वाली speed पर यकीन करना मुश्किल हो रहा था; कई बार तो मुझे भ्रम हुआ कि यह ठीक से चला भी या नहीं।
मुझे
uv add <mydependencies> --script mycoolscript.pycommand बहुत पसंद है, और अगर ऊपर#!/usr/bin/env -S uv runजोड़ दें तो Python script तुरंत चल सकती है, इसलिए यह मेरे लिए बहुत उपयोगी tool बन गया है।uv add --scriptऔर साधारणuv addअलग हैं। साथ ही, official docs मेंrun --withया PEP723 support जैसी और भी उपयोगी features हैं, इसलिए उन्हें ज़रूर देखें। official guidemydependenciesसे आपका मतलब खास तौर पर क्या है? क्या यह config file जैसी किसी चीज़ को दर्शाता है?मैंने uv को पहले आज़माया था और इसकी जबरदस्त speed और आसान इस्तेमाल देखकर हैरान रह गया। अब pip इस्तेमाल करने की लगभग कोई वजह नहीं बची, और अगर आप सिर्फ Python इस्तेमाल करते हैं तो conda की भी ज़रूरत नहीं रहती।
मुझे UV बहुत पसंद है। Astral टीम का Ruff भी पसंद है, इसलिए मैंने पुराने pylint + Black setup से linting/formatting दोनों Ruff पर shift कर दिए। मेरे यहाँ lint time 90 सेकंड से घटकर 1.5 सेकंड से भी कम हो गया, जो चौंका देने वाला था।
हाल में मुझे छोटे executable scripts चलाने के लिए नीचे वाला pattern बहुत पसंद आने लगा है और मैं इसे अक्सर इस्तेमाल कर रहा हूँ:
#!/usr/bin/env uvxजैसा कोई और सरल रूप मिल जाए। अभी तो हर बार इस्तेमाल करते समय इसे खोजकर देखना पड़ता है।मैं इतना संतुष्ट हूँ कि pip/twine/requirements.txt पर वापस नहीं जाना चाहता। कई projects internal GitLab में shared wheels रखते थे, और पुरानी 10-line YAML को अब सिर्फ
uv buildऔरuv publishकी दो lines से बदला जा सकता है। dependencies लाना आसान हो गया है और मुख्य dependencies भी एक नज़र में दिख जाती हैं। requirements.txt में सब कुछ मिला-जुला भरने की झंझट खत्म हो जाती है।