"cargo install" है, लेकिन "cargo update" नहीं? Rust डेवलपर्स की आम समस्या
\n\nआपने अभी-अभी cargo install ripgrep चलाया और rg का ताज़ा बाइनरी मिल गया। एक हफ्ता बीत गया। अब आपको पता चला कि नया वर्जन 14.1.0 आ गया है (पुराना 13.0.0 था)। और फिर सवाल उठता है: "Does cargo install have an equivalent update command?"
यह सवाल Stack Overflow पर हज़ारों बार देखा जा चुका है। और सही भी है। दरअसल, cargo में कोई बिल्ट-इन cargo install update कमांड नहीं है। हाँ, आपने सही पढ़ा। कोई नहीं है। लेकिन इसका मतलब यह नहीं कि आपको हर बार मैन्युअली नया वर्जन डाउनलोड करना पड़े। इसके कई तरीके हैं, और हम उन सभी पर चर्चा करेंगे — सरल से लेकर स्मार्ट तरीकों तक।
इस लेख में हम सिर्फ Stack Overflow के जवाब का अनुवाद नहीं करेंगे। हम तरीकों की तुलना करेंगे, असली कोड दिखाएंगे और व्यावहारिक सुझाव देंगे। चलिए शुरू करते हैं!
\n\nCargo में इंस्टॉल किए गए क्रेट्स के लिए "update" कमांड क्यों नहीं है?
\n\nइससे पहले कि हम बग ढूंढने लगें, आइए फिलॉसफी समझें। cargo install का उद्देश्य बाइनरी क्रेट्स (जिनके Cargo.toml में [[bin]] सेक्शन होता है) को इंस्टॉल करना है। यह apt या npm जैसा पैकेज मैनेजर नहीं है। Cargo मुख्य रूप से प्रोजेक्ट्स के लिए बिल्डर और डिपेंडेंसी मैनेजर है, न कि ग्लोबल सॉफ्टवेयर इंस्टॉलर।
cargo update कमांड मौजूद है, लेकिन यह प्रोजेक्ट के अंदर काम करता है — Cargo.lock में डिपेंडेंसी अपडेट करता है। ग्लोबली इंस्टॉल किए गए बाइनरी के लिए अलग समाधान चाहिए।
तरीका #1: क्लासिक रीइंस्टॉल (cargo install --force)
\n\nसबसे आसान और सीधा तरीका — क्रेट को --force फ्लैग के साथ रीइंस्टॉल करना:
# पहली बार इंस्टॉल किया\ncargo install ripgrep\n\n# एक हफ्ते बाद — अपडेट करें\ncargo install --force ripgrep\n\n\nअंदर क्या होता है? Cargo crates.io से क्रेट का नवीनतम वर्जन डाउनलोड करता है, उसे रीबिल्ड करता है और बाइनरी को बदल देता है। --force फ्लैग मौजूदा फाइल को ओवरराइट करने के लिए मजबूर करता है, भले ही वर्जन समान हो।
फायदे:
\n- \n
- अतिरिक्त टूल्स इंस्टॉल करने की जरूरत नहीं \n
- हमेशा और हर जगह काम करता है \n
- समझने में आसान \n
नुकसान:
\n- \n
- हर बार पूरी रीकंपाइलेशन (बड़े क्रेट के लिए धीमा) \n
- यह जांच नहीं करता कि नया वर्जन आया है या नहीं — बस रीइंस्टॉल करता है \n
- अगर 10+ क्रेट इंस्टॉल हैं तो असुविधाजनक \n
यह ड्राइवर अपडेट करने के लिए विंडोज रीइंस्टॉल करने जैसा है। काम करता है? हाँ। सबसे अच्छा तरीका? नहीं।
\n\nतरीका #2: cargo-outdated — पुराने क्रेट्स का स्मार्ट डिटेक्टर
\n\nअगर आप पक्का जानना चाहते हैं कि अपडेट जरूरी है, तो cargo-outdated इंस्टॉल करें:
cargo install cargo-outdated\n\n\nअब जांचें कि कौन से क्रेट पुराने हो गए हैं:
\n\ncargo outdated --root ~/.cargo\n\n\nआउटपुट कुछ इस तरह दिखेगा:
\n\nPackage Current Latest Deps\nripgrep 13.0.0 14.1.0 -\nbat 0.22.1 0.23.0 -\n\n\nफिर आप cargo install --force के जरिए किसी खास क्रेट को अपडेट कर सकते हैं। लेकिन यह अभी भी दो कदम का काम है। ऑटोमेशन चाहिए? आगे पढ़ें।
फायदे:
\n- \n
- सिर्फ उन क्रेट्स को दिखाता है जो वास्तव में पुराने हैं \n
- प्रोजेक्ट की डिपेंडेंसी के लिए भी काम करता है \n
- फिल्टर करने के विकल्प उपलब्ध हैं \n
नुकसान:
\n- \n
- खुद अपडेट नहीं करता — सिर्फ जानकारी देता है \n
- अलग से इंस्टॉल करना पड़ता है \n
तरीका #3: cargo-update (हाँ, ऐसा क्रेट मौजूद है!)
\n\n"Does cargo install have an equivalent update command?" का सबसे सुरुचिपूर्ण जवाब — यह है