4 पॉइंट द्वारा GN⁺ 2025-06-24 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 init command से project auto initialization और virtualenv creation
  • uv add से dependency जोड़ना, और uv lock तथा uv sync commands से 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 run command से isolated environment में execution
  • data science/automation जैसी one-off scripts के उपयोग के लिए optimized

टूल मैनेजमेंट (Tools)

  • Python package format वाले CLI tools को pipx की तरह install और run किया जा सकता है
  • uv tool install, uvx commands से temporary environment या global execution का उपयोग
  • installed tools की जाँच, version management, और updates का support

Python version management

  • कई Python versions को आसानी से install और तुरंत switch किया जा सकता है
  • कई versions को parallel manage किया जा सकता है, और project-specific .python-version pin 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 टिप्पणियां

 
GN⁺ 2025-06-24
Hacker News टिप्पणियाँ
  • कुछ महीने पहले तक मैं सोचता था कि मैं uv कभी इस्तेमाल नहीं करूंगा, क्योंकि मैं पहले से venv और pip का आदी था और मुझे नहीं लगता था कि किसी और टूल की जरूरत है। लेकिन हाल में एक shared server पर, जहाँ root access नहीं था, तरह-तरह के package और driver पूरी तरह टूटे हुए थे और मुझे pytorch चाहिए था। उस अनुभव के बाद मैं पूरी तरह uv पर आ गया। pip में बहुत समय लगता था, cache बहुत जगह घेरता था और उसकी location बदलना भी आसान नहीं था। uv पर आने के बाद सब कुछ बहुत अच्छे से चला, इसलिए मैं काफी संतुष्ट हूँ। अगर आप अभी भी हिचक रहे हैं, तो कम से कम 5 मिनट के लिए इसे ज़रूर आज़माएँ।

    • uv की सबसे बड़ी खूबी यह है कि यह पुराने venv-आधारित workflow के साथ पूरी तरह compatible है; बस uv venv चलाइए और काम हो जाता है।
    • uv को समझाना, खासकर beginners को उसका इस्तेमाल सिखाना, कहीं ज्यादा आसान लगता है। pip + config file + venv का combination सही venv बनाकर install करने की प्रक्रिया में उलझाता था, और हर script run/test के समय अजीब shebang या venv activation याद रखना पड़ता था। error messages भी पूरी मदद नहीं करते थे। beginners को सिखाते समय ये tools काफी झंझट वाले लगते थे, और अब सिर्फ uv run, uv add, uv sync याद रखना होता है, इसलिए टीम के लोग भी इसे कहीं कम बोझिल मानते हैं।
    • मेरे मामले में मैं asdf से mise पर गया था, इसलिए मुझे जिज्ञासा है कि uv जैसे general-purpose tools के मुकाबले यह कैसा है।
    • आपने कहा कि pip cache बहुत जगह घेरता था और उसकी location भी ठीक से नहीं बदली जा सकती थी; जानना चाहता हूँ कि क्या uv storage space के लिहाज से बेहतर है। अगर हाँ, तो क्या इसकी वजह sharing का बेहतर तरीका है?
    • हाल में एक experimental repo में मैंने "uv a b c" से शुरू होने वाली एक छोटी guide देखकर इसे चलाया। अंदर काफी duplication लगता है, लेकिन actual use में GNU-Debian-Ubuntu default host पर कोई खास समस्या नहीं आई और सब कुछ आराम से चला, इसलिए संतुष्ट हूँ।
  • जब मैंने पहली बार uv इस्तेमाल किया, तो pip की तुलना में यह इतना तेज़ खत्म हुआ कि मुझे लगा शायद कुछ गड़बड़ हुई है या यह ठीक से चला ही नहीं।

    • कभी-कभी package install होने में लगभग 200ms लगते हैं, तो Enter दबाने और prompt वापस आने के बीच बस हल्की-सी delay महसूस होती है। लेकिन Poetry में तो तब तक कॉफी पीकर भी आ सकते हैं, इसलिए speed difference बहुत साफ़ है।
    • मुझे भी बिल्कुल ऐसा ही लगा। अनुभव इतना smooth था कि Python जैसा ही नहीं लगा।
    • मेरे साथ भी हाल में ऐसा ही हुआ, और उसी की वजह से मैं पूरी तरह uv पर आ गया।
    • मुझे भी इतना शक हुआ था, लेकिन एक बार कोशिश करने के बाद वापस जाना मुश्किल लगने लगा।
  • मुझे लगता है uv और ruff उस कहावत के शानदार counterexample हैं कि "कभी wheel को दोबारा मत बनाओ"। अगर उद्देश्य साफ़ हो, तो कभी-कभी मौजूदा चीज़ से कहीं बेहतर नतीजा निकल सकता है।

    • ज़्यादातर बार यह बात उस संदर्भ में कही जाती है जहाँ कोई beginner, जो मौजूदा सिस्टम की सीमाएँ और सुधार की गुंजाइश नहीं समझता, जल्दबाज़ी में वही चीज़ फिर से बनाने की कोशिश करता है। असली experts पर यह बात लागू नहीं होती।
    • इन्होंने wheel को दोबारा नहीं बनाया, बल्कि पुराने लकड़ी के wheel की जगह ज्यादा मजबूत material लगाया ताकि वह 10 गुना तेज़ घूम सके।
    • Python package management का इतिहास ही देख लें, तो लगता है हर कोई इस सोच के साथ उतरता है कि वह पुरानी चीज़ से बेहतर बनाएगा।
    • सच कहें तो "wheel को दोबारा मत बनाओ" वाली कहावत ही तर्कसंगत नहीं लगती। हमने असली wheel भी लगातार बेहतर बनाए हैं, तो software में बेहतर wheel बनाने से क्यों रुकें?
    • थोड़ा अलग सवाल है, लेकिन उत्सुकता है कि "order of magnitude better" की जगह लोग छोटा "10x" क्यों नहीं बोलते।
  • छोटे या 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 का उपयोग करके।

    • यह बिल्कुल भी अजीब case नहीं है। बहुत-से user सस्ते VPS पर side projects चलाते हैं, मैं भी अक्सर ऐसा करता हूँ, भले AWS पर नहीं। साझा करने के लिए धन्यवाद, उम्मीद है auto-detection और बेहतर होगी।
  • हाल में मैं अपने laptop पर personal use के लिए uv आज़मा रहा हूँ, और pip का आदी होने के कारण इसकी महसूस होने वाली speed पर यकीन करना मुश्किल हो रहा था; कई बार तो मुझे भ्रम हुआ कि यह ठीक से चला भी या नहीं।

  • मुझे uv add <mydependencies> --script mycoolscript.py command बहुत पसंद है, और अगर ऊपर #!/usr/bin/env -S uv run जोड़ दें तो Python script तुरंत चल सकती है, इसलिए यह मेरे लिए बहुत उपयोगी tool बन गया है।

    • मैंने यह तरीका Claude Project को एक खास prompt के साथ सिखाया, ताकि सिर्फ एक input से dependencies सहित पूरी script अपने-आप बनाई जा सके। Claude 4 का cutoff मार्च 2025 है। Claude Sonnet 4 में यह feature अतिरिक्त prompt के बिना भी काम करता है। उदाहरण के लिए, अगर आप कोई URL दें, तो यह httpx और beautifulsoup से crawl करके links की list CSV में लौटाने वाला code तुरंत बना देता है। संबंधित सामग्री Claude script result
    • मैं यह trick Marimo.io notebook के app-mode के साथ इस्तेमाल करता हूँ। अगर सिर्फ uv install हो, तो तुरंत responsive और reproducible apps बहुत कम तैयारी के साथ दूसरों तक आसानी से पहुँचाई जा सकती हैं। कमाल का combination है।
    • अब मुझे छोटी scripts भी तुरंत मौके पर चलाने की आदत हो गई है। environment या dependency management की चिंता नहीं करनी पड़ती, इसलिए अनुभव बहुत बेहतर हो गया है। the little scripter पर लेख, संबंधित YouTube वीडियो, ez-mcp GitHub
    • उदाहरण को गलत पढ़ लेने की एक correction, और यह स्पष्टीकरण कि project context में uv add --script और साधारण uv add अलग हैं। साथ ही, official docs में run --with या PEP723 support जैसी और भी उपयोगी features हैं, इसलिए उन्हें ज़रूर देखें। official guide
    • mydependencies से आपका मतलब खास तौर पर क्या है? क्या यह config file जैसी किसी चीज़ को दर्शाता है?
  • मैंने uv को पहले आज़माया था और इसकी जबरदस्त speed और आसान इस्तेमाल देखकर हैरान रह गया। अब pip इस्तेमाल करने की लगभग कोई वजह नहीं बची, और अगर आप सिर्फ Python इस्तेमाल करते हैं तो conda की भी ज़रूरत नहीं रहती।

    • pyenv और poetry भी अब मैं इस्तेमाल नहीं करता।
  • मुझे UV बहुत पसंद है। Astral टीम का Ruff भी पसंद है, इसलिए मैंने पुराने pylint + Black setup से linting/formatting दोनों Ruff पर shift कर दिए। मेरे यहाँ lint time 90 सेकंड से घटकर 1.5 सेकंड से भी कम हो गया, जो चौंका देने वाला था।

    • लेकिन बाद में यह जानकर थोड़ा अफसोस हुआ कि ruff, pylint की कुछ checks ही करता है और बहुत स्पष्ट errors भी कभी-कभी पकड़ नहीं पाता, जैसे कि ऐसा code जो चल ही नहीं सकता।
  • हाल में मुझे छोटे executable scripts चलाने के लिए नीचे वाला pattern बहुत पसंद आने लगा है और मैं इसे अक्सर इस्तेमाल कर रहा हूँ:

    #!/usr/bin/env -S uv --quiet run --script
    # /// script
    # requires-python = ">=3.13"
    # dependencies = [
    #   "python-dateutil",
    # ]
    # ///
    #
    # [python script that needs dateutil]  
    
    • shebang line याद रखना बहुत मुश्किल है, इसलिए अच्छा होगा अगर #!/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 में सब कुछ मिला-जुला भरने की झंझट खत्म हो जाती है।