29 पॉइंट द्वारा GN⁺ 2025-10-30 | 7 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 की एक लाइन कमांड से किया जा सकता है
  • क्योंकि यह मौजूदा 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 हो जाता है
    • .venv directory में 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 टिप्पणियां

 
kkksss 2025-11-06

मुझे लगा था कि pdm, uv से लगभग काफ़ी मिलता-जुलता है, लेकिन pdm के बारे में ज़्यादा बात नहीं हो रही है।

 
ztaka 2025-11-02

ML और Web में इसे अच्छी तरह इस्तेमाल कर रहा हूँ, और उम्मीद है कि uv जल्दी ही एक उबाऊ तकनीक बन जाए, हाहा

 
yuntae 2025-10-30

लगता है कि अब uv से जुड़ी पोस्टों की सामग्री में ज़्यादा बदलाव नहीं आता।

 
pmc7777 2025-10-30

Maven और Gradle भी..

 
doolayer 2025-10-30

अब अगर कोई ऐसा repo दिखता है जिसमें सिर्फ requirements हो और pyproject.toml न हो, तो वह काफ़ी पुराना लगता है, हाहा;

 
GN⁺ 2025-10-30
Hacker News राय
  • पहले सुनता था कि Python की tooling काफ़ी है, लेकिन अब जब Python डेवलपर्स npm, cargo, bundler जैसे lockfile-आधारित ecosystem का अनुभव करके उसके फ़ायदे समझ रहे हैं, तो अच्छा लगता है
    npm में भी समस्याएँ हैं, लेकिन consistent installs और lock files वाकई शानदार विचार हैं

    • किसी और के Python प्रोजेक्ट को चलाना पड़े, इससे ज़्यादा डरावनी चीज़ शायद ही कोई हो
      यह हैरानी की बात है कि इतने लंबे समय तक environment management इतना असुविधाजनक रहा
    • सोचता हूँ इसमें इतना समय क्यों लगा
      पता नहीं इतने सारे प्रयास सिर्फ़ package management की कठिनाई की वजह से असफल हुए, या फिर VC funding की ज़रूरत थी
    • मैं पहले से pip freeze > requirements.txt और pip install -r requirements.txt इस्तेमाल करता आया हूँ
      अगर version ranges न लिखें, तो requirements.txt लगभग lockfile की भूमिका निभाता है
      इसलिए आजकल के ‘official lockfile’ उत्साह को थोड़ा बढ़ा-चढ़ाकर देखा गया लगता है
    • npm में भी काफ़ी समय तक lockfile नहीं था
      मेरा मानना है कि yarn आने के बाद npm में बड़ा सुधार हुआ
    • मैं 1998 से web development कर रहा हूँ, और मुझे लगता है कि npm से PNPM कहीं बेहतर है
      यह ज़्यादा तेज़, 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 कर देता है

    • security के नज़रिये से देखें तो इस तरीके में थोड़ा risk है
      क्योंकि script लिखने वाला malicious dependency छिपा सकता है
      अगर whitelist feature हो तो अच्छा होगा
    • आज की तारीख़ के हिसाब से maximum release date flag इस्तेमाल करके lockfile के बिना भी versions pin किए जा सकते हैं
      हालाँकि कुछ packages release date detect नहीं कर पाते (जैसे: yaml)
    • इसे चलाने के लिए uv installed होना चाहिए, इसलिए यह पूरी तरह standalone नहीं है
    • /usr/bin/env -S का support होना चाहिए, और dependency names में uv pip install command में इस्तेमाल होने वाले distribution package names लिखने होते हैं
      यह PEP 723 standard है, और pipx भी इसे support करता है
    • internet connection चाहिए, और repository की स्थिति के हिसाब से अलग versions install हो सकते हैं
  • uv इस्तेमाल करने से पहले मुझे Rust में दिलचस्पी नहीं थी, लेकिन uv की वजह से performance-sensitive code को Rust में ले जाने लगा हूँ
    काश conda पूरी तरह गायब हो जाए। ML clusters में conda environments बहुत बड़े हो जाते हैं और reproducibility भी कम होती है

    • conda के विकल्प के तौर पर Rust-आधारित pixi की सिफ़ारिश मिली। यह uv के PyPI solver को reuse करता है
    • conda में dependencies pin कर दें तो reproducibility होती है, लेकिन builds धीमे होते हैं
    • अगर ML cluster है, तो मेरा मानना है कि containerization होना चाहिए, और फिर conda की ज़रूरत नहीं पड़ती
    • जानना चाहता हूँ कि uv से CUDA dependencies management कैसे किया जाता है
    • बड़े ML dependencies management के लिए open source approach पर Metaflow docs और Fast Bakery ब्लॉग देखें
  • पहले pyenv + venv + pip + pipx का combination मेरे लिए काफ़ी संतोषजनक था, लेकिन uv में

    • dependency resolution speed बहुत तेज़ है
    • uv run, uv add आदि से usability काफ़ी बेहतर हो गई है
    • इसने कई tools को एक में समेट दिया है
    • Python install करना भी आसान हो गया है
  • environment activate करने के बजाय command के आगे uv लगा देना कहीं ज़्यादा सुविधाजनक है
    Python version management भी आसान हो जाता है, और project के हिसाब से batteries-included जैसा एहसास मिलता है
    अभी लंबी अवधि की stability के बारे में नहीं जानता, लेकिन नए projects में इसे default की तरह इस्तेमाल कर रहा हूँ

    • environment activation असल में सिर्फ़ PATH और prompt को adjust करना ही है
      कुछ लोगों को uv का environment auto-detect करना पसंद नहीं आता
      Python version management की अहमियत मुझे पूरी तरह समझ नहीं आती, लेकिन uv से environment फिर से बनाना बहुत तेज़ हो जाता है
    • uv लगाने से commands stateless तरीके से चलाई जा सकती हैं, जो collaboration में सुविधाजनक है
    • इसे mise के साथ इस्तेमाल करके auto-activation किया जा सकता है, लेकिन uv prefix फिर भी उपयोगी है
    • uv का दर्शन यह है कि venv disposable है। दिक्कत हो तो .venv हटा दो
    • सच तो यह है कि इस तरह का environment setup बस “अपने-आप काम करना चाहिए” वाली समस्या है
  • यह blog post मेरे अनुभव से लगभग पूरी तरह मेल खाती है
    friction कम हुई है और चीज़ें सरल हुई हैं
    उम्मीद है कि Python community uv को default tool के रूप में अपनाएगी

  • Rust-आधारित tools ने feedback speed को पूरी तरह बदल दिया है
    लेकिन यह जानने की जिज्ञासा है कि Astral कमाई कैसे करेगा। उसने funding भी ली है, लेकिन कोई paid product नहीं है

    • Astral का revenue model open source tools के साथ integrated enterprise software बेचना है
      उदाहरण: internal package registry
      संबंधित इंटरव्यू: Charlie Marsh इंटरव्यू
    • जो product आगे चलकर paid service बन सकता है, वह है Pyx
    • Conda भी “security-hardened packages” की access बेचकर पैसे कमा रहा है
      अगर Python developers की संख्या 1 करोड़ है, तो uv भी काफ़ी अच्छी तरह monetize हो सकता है
  • व्यक्तिगत रूप से मुझे लगता है कि type annotations और GIL removal uv से ज़्यादा महत्वपूर्ण हैं
    uv अभी शुरुआती चरण में है, इसलिए इसमें कुछ असुविधाएँ भी हैं। आख़िरकार यह भी एक package manager ही है

    • लोग uv की जो तारीफ़ करते हैं, उसका एक हिस्सा दरअसल pip और venv में standardized PEPs की वजह से हुए सुधारों का नतीजा है
      pip का नया resolver और wheel distributions की बढ़ती संख्या ने इसमें बड़ी भूमिका निभाई है
      संबंधित लेख: Wheels are faster for pure Python
    • language level पर GIL removal बड़ा बदलाव होगा, लेकिन वास्तव में उपयोगी use cases अभी ज़्यादा नहीं हैं
    • type hints तो 2015 में ही आ चुके थे, यानी यह पुरानी सुविधा है
    • uv सिर्फ़ package manager नहीं है, यह deployment simplification में भी बड़ी value देता है
      इसका Rust में लिखा होना भी दिलचस्प है। LLVM की तरह इसकी संरचना दूसरे languages को भी support कर सकती है
      end-user के नज़रिये से uv कहीं बेहतर है, और अगर maintainers को असुविधा है तो उन्हें feedback देना चाहिए
    • type annotations documentation के लिए अच्छे हैं, लेकिन practical utility कम है
      अगर strict mode आए तो performance improvement भी संभव है, लेकिन वह language philosophy से टकराएगा
      फिर भी अगर conda गायब हो जाए, तो मैं uv पर जाने को तैयार हूँ
  • मुझे व्यक्तिगत रूप से uv पसंद नहीं है

    • यह बहुत कुछ करने की कोशिश करता है: pip, pyenv, virtualenv, यहाँ तक कि ruff तक को एक साथ replace करना चाहता है
    • uv pip इस्तेमाल करना पड़ता है, इसलिए यह पूरा replacement भी नहीं है
    • Docker के साथ compatibility भी कमज़ोर है
    • नए environment variables बहुत हैं, जिससे complexity बढ़ती है
    • मुझे नहीं लगता कि pyenv, virtualenv, और pip का अलग-अलग होना कोई अजीब बात है
      लेकिन pip और venv भी अक्सर टूट जाते हैं और debug करना और मुश्किल बना देते हैं
    • सच कहें तो pip, pyenv, virtualenv हमेशा साथ ही इस्तेमाल होते हैं, इसलिए integrated tool तर्कसंगत है
      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 कई भूमिकाएँ अच्छी तरह निभाता है। आपने ख़ास तौर पर कौन-सी समस्या झेली, यह जानना चाहूँगा
 
aer0700 2025-11-01

uv तेज़ है, यह तो अच्छी बात है, लेकिन कभी-कभी लगता है कि अगर इसे pip को बेहतर बनाने की दिशा में ले जाया गया होता तो कैसा रहता।