कोड formatting फीचर को प्रयोगात्मक रूप से uv में पेश किया गया
(pydevtools.com)- नए uv वर्ज़न में code formatting फीचर को प्रयोगात्मक रूप से उपलब्ध कराया गया है
uv formatकमांड अंदरूनी रूप से Ruff formatter का उपयोग करके Python कोड को एकसमान style में फ़ॉर्मैट करता है- अब अलग टूल के बिना सिर्फ uv से आसानी से कोड व्यवस्थित करना संभव है
- उपयोगकर्ता अतिरिक्त arguments के ज़रिए formatting behavior को विस्तार से नियंत्रित कर सकते हैं
- यह अभी प्रयोगात्मक फीचर है, इसलिए कमांड का तरीका, error handling आदि में बदलाव संभव है
अवलोकन
uv की नवीनतम रिलीज़ (0.8.13) में Python developers के लंबे समय से प्रतीक्षित प्रयोगात्मक कमांड uv format को पेश किया गया है। इस फीचर की मदद से प्रोजेक्ट के भीतर अलग formatting tool को मैनेज किए बिना सिर्फ uv के ज़रिए code style को व्यवस्थित किया जा सकता है
uv format क्या है?
uv formatकमांड uv interface के माध्यम से Python code formatting उपलब्ध कराता है- अंदरूनी रूप से यह Ruff formatter को कॉल करके कोड को अपने-आप एकसमान ढंग से व्यवस्थित करता है
डेवलपर के लिए संदर्भ
Charlie Marsh (uv developer) ने Hacker News पर इसे इस तरह समझाया:
Ruff और uv का विलय नहीं हो रहा है, और दोनों अब भी अलग-अलग tools हैं
इसका उद्देश्य सिर्फ user experience बेहतर करना है ताकि उपयोगकर्ता formatter को अलग tool के रूप में महसूस किए बिना उसका उपयोग कर सकें
यह Rust ecosystem में cargo fmt और rustfmt के रिश्ते जैसा है
उपयोग का तरीका
- uv 0.8.13 या उससे ऊपर का वर्ज़न उपयोग करना होगा
- प्रोजेक्ट root में
uv formatकमांड चलाने पर ruff format चलाने जैसा प्रभाव मिलता है - इसका execution तरीका uv के command interface का पालन करता है
अतिरिक्त arguments पास करना
uv format -- [추가 인자]के रूप में Ruff को भेजे जाने वाले विस्तृत options सेट किए जा सकते हैं- इससे uv की सुविधा और Ruff की बारीक settings, दोनों का एक साथ उपयोग किया जा सकता है
प्रयोगात्मक चरण की सूचना
- यह फीचर फिलहाल प्रयोगात्मक चरण में है, इसलिए आगे चलकर कमांड का तरीका या प्रोजेक्ट संरचना के साथ इसका integration बदल सकता है
- error handling, output format आदि में भी लगातार सुधार किया जाएगा
- उपयोगकर्ता feedback को शामिल करते हुए यह फीचर आगे विकसित होगा
निष्कर्ष
- अगर Python प्रोजेक्ट में सरल और एकसमान code styling की ज़रूरत है, तो
uv formatको सक्रिय रूप से आज़माया जा सकता है - चूँकि यह प्रयोगात्मक शुरुआत है, इसलिए इसे इस्तेमाल करने के बाद feedback देना uv के आगे के विकास में योगदान दे सकता है
1 टिप्पणियां
Hacker News की राय
ruffकोtyके साथ जोड़ना बेहतर होगा, औरuvको package या project management पर ही केंद्रित रहना चाहिए; इसे code style editing तक नहीं जाना चाहिए। मेरे हिसाब सेuvको code files केवल dependency updates (PEP 723) के समय ही बदलनी चाहिएruffऔरuvको merge नहीं किया जा रहा, और वे अलग tools ही बने रहेंगे। इसका उद्देश्य उन users के लिए एक सरल अनुभव देना है जो formatter के बारे में अलग से सोचना नहीं चाहते। यह Rust के Cargo जैसा सेटअप है, जहाँcargo fmtअंदर सेrustfmtचलाता हैcargo fmtहोने वाली शैली की नकल हैuvको एक complete Python package manager बनाना है, जबकि उसके अलग-अलग component tools जरूरत पड़ने पर standalone भी इस्तेमाल किए जा सकें। यानीuvPython के लिए cargo जैसा है; अगर आपको सिर्फ तेज type checker चाहिए तोty, और सिर्फ formatter/linter चाहिए तोruffचुन सकें। इस लिहाज़ सेruffऔरtyको merge करना बहुत अर्थपूर्ण नहीं लगताtyभीuvमें शामिल हो जाए तो कैसा होगा। चूँकि ये सब astral.sh से आ रहे हैं, शायद यही vision हो, लेकिन अभीtyतैयार नहीं लगताuv lintजैसा विकल्प जोड़ना होगा जो अंदर सेtyचलाए। आदर्श रूप से एक standard command या commands की एक श्रृंखला से Python project को तैयार करना संभव होना चाहिए—format, lint, test, deploy—शायद यही यहाँ की vision हैuvका सच में आनंद लेकर उपयोग करता हूँ, लेकिन थोड़ी चिंता है कि यह अनावश्यक रूप से बड़ा होता जा रहा है। उदाहरण के लिए, कई subcommands बहुत सारे अनोखे flags support करते हैं, जिनमें से कुछ लगभग एक जैसे नतीजे देते हैं (uv run --no-projectऔरuv run --activeआदि)। बेवजह नए features जोड़ने के बजाय, काश वे मौजूदा tools और documentation सुधारने पर ज्यादा ध्यान देंuv syncका सैद्धांतिक फायदा यह है कि वह reproducible package sets ही बनाता है, लेकिनtorch-tensorrtयाflash-attnजैसे जटिल packages environment के अनुसार बदल ही सकते हैं। Python community अक्सर समस्याओं को "मेरे कंप्यूटर पर तो काम करता है" कहकर व्यक्तिगत बना देती है, लेकिन software को deployable, secure, repeatable और reliable बनाने की लागत कभी गायब नहीं होती; बस बाद में किसी और को अधिक सीमित परिस्थितियों में वह कीमत चुकानी पड़ती है। इन विविध users और operational requirements को एक साथ संतुलित करना वास्तव में कठिन हैuvमें subcommands जोड़ना bloat क्यों माना जा रहा है।uvपहले से ही एक जटिल tool है और अच्छी तरह documented भी है। अगर commands इतने intuitive और self-explanatory हों, तो उनका जुड़ना काफी स्वाभाविक लगता हैuvके बारे में यह बहस कुछ वैसी लगती है जैसे कोई कहे, "make command में targets बहुत ज्यादा हैं"aptऔरcargoकी तरह अलग binaries के रूप में काम करते हैंuvx ruff formatका एक शब्द लंबा होना शायद कोई बुरी बात नहीं है। उल्टा, इससे यह अस्पष्ट हो सकता है कि वास्तव में कौन-सा formatter चल रहा है, क्याruffअपने-आप install हो रहा है, या पहले की तरह tool download करके cache किया जा रहा हैuv formatकाम नहीं करेगाuvका असर पहले ही काफी बड़ा रहा है, इसलिए code quality सुधारना आसान करने वाला कोई भी तरीका हमेशा स्वागतयोग्य है। हाँ,ruffको अलग से इस्तेमाल किया जा सकता है या pre-commit setup भी किया जा सकता है, लेकिनuv <feature>जैसा सरल mental model टीम के लिए बहुत मददगार है। अच्छा होगा अगर दूसरे formatters के साथ integration भी मिले, और अगर SQL/dbt model formatting तक support आ जाए तो और क्या चाहिए। अभी तो इसे आज़माकर इसकी संभावनाएँ देखना चाहता हूँjust formatसे Python/SQL/Bash/TypeScript सब कुछ एक साथ format किया जा सकता हैuvका बढ़ता हुआ उपयोग कर रहा हूँ और इसके फायदे भी समझता हूँ, लेकिन यह अभी भी मेरी पहली पसंद नहीं है, और यह बदलाव शायद इसे मेरे लिए ज्यादा पसंदीदा नहीं बनाएगाruffकी functionalityuvऔरtyमें integrate हो जाएगी। linting कोtyसंभाले तो वह codebase को बेहतर समझकर अधिक smart हो सकता है, और formatting कोuvसंभाले तो वह project management के अपने मुख्य उद्देश्य के अनुकूल होगाtyपहले से हीruffवाले repository में है, इसलिए integration भी शायद बहुत दूर की बात नहीं हैuvPython में cargo जैसी भूमिका निभा दे, तो Python development experience बहुत बेहतर हो जाएगा। 25 साल से अधिक समय तक Python इस्तेमाल करते हुए मैंने इसकी कई कमियों के आसपास रास्ते निकाले हैं; अब बिना ज्यादा सोचे सिर्फuvसे यह सब हो जाना बहुत संतोषजनक लगता हैuv formatअसल मेंuv run --with ruff ruffका shortcut हैuv fmtरखता, और roadmap मेंuv vetजैसी चीज़ भी जोड़ताuv formatमूल रूप सेruff formatका frontend ही है; कोई नया formatter नहीं जोड़ा जा रहाruff formatको आसानी से चलाने के लिए एक shortcut भर है