2016-07-25 5 views
12

मैं iron>= 0.3, <= 0.4 पर निर्भरता है कि एक परियोजना निर्भरता (एक कुकी उपयोगिता) है कि है।समेकन माल निर्भरता

मेरे परियोजना लोहा 0.3 पर निर्भरता (तो मैं router मिडलवेयर कि अभी तक नवीनतम लोहे को अपडेट नहीं किया गया उपयोग कर सकते हैं) है।

जब मैं अपनी परियोजना को संकलित करने का प्रयास करता हूं, तो कुकी उपयोगिता 0.4 लोहे के संस्करण को खींचती है, और मुझे त्रुटियां मिलती हैं क्योंकि लौह के विभिन्न संस्करणों का उपयोग किया जा रहा है।

हालांकि, मैं कर सकते हैं:

cargo update -p <cookie utility> 

जो (आमतौर पर) लोहा एक मैं उपयोग कर रहा हूँ से मिलान करने पर परिवर्तन है कि पैकेज की निर्भरता, और लोहे 0.4 पर बाहरी निर्भरता को हटा। (विचित्र रूप से, मुझे कभी-कभी इसे कमांड को अद्यतन करने से पहले दो बार चलाने की ज़रूरत होती है।)

स्पष्ट रूप से मैं निर्भरता के निर्भरता संस्करण को निर्दिष्ट नहीं कर सकता: Set specific version of the dependency of a project's dependency in Cargo.toml or Cargo.lock

यह अच्छा होगा अगर माल लगता है कि हो सकता है कि मैं लोहे का एक एकल संस्करण का उपयोग करना चाहते हैं, लेकिन मैं समझता हूँ कि ऐसा क्यों नहीं कर सकते। हालांकि, मैं उलझन में हूं कि क्यों cargo update -p <package> वास्तव में काम करता है; ऐसा लगता है कि यह पैकेज के लिए निर्भरता को अद्यतन करेगा।


मुझे लगता है कि मेरी पहली असली सवाल यह है: मैं कैसे निर्भरता की निर्भरता संस्करणों निर्दिष्ट कर सकते हैं (जब और केवल संस्करण मैं चाहता हूँ कि पुस्तकालय के समर्थित संस्करण सीमा के भीतर हो)? मुझे नहीं लगता कि उपरोक्त प्रश्न में सुझाए गए समाधान आदर्श हैं। मुझे लगता है कि यह बेहतर होगा अगर कार्गो इस कुएं का समर्थन कर सके, ताकि पुस्तकालय अपनी निर्भरता संस्करण को अपनी कार्यक्षमता की अनुमति के रूप में खोल सकें।

एक ही समय में, मैं इस "चाल" है कि मैं क्या चाहते हैं (cargo update -p <pkg>) करने के लिए लगता है पाया। मैंने बहुत कठिन नहीं देखा है, लेकिन इस व्यवहार को किसी भी स्पष्ट स्थान में वर्णित नहीं लगता है। मेरा दूसरा सवाल यह है: क्या यह निर्भरता को सहारा देने का एक वैध तरीका है? क्या कोई जगह है जिसके बारे में मुझे और जानकारी मिल सकती है?


और चरणों पुन: पेश करने:

  1. कोई नया प्रोजेक्ट बनाएं: cargo new --bin ironapp; cd ironapp
  2. कुकी निर्भरता बनाएं: cargo new cookie_utiliron = ">= 0.3, <= 0.4":
  3. cookie_util/Cargo.toml में एक निर्भरता जोड़ें। iron = "0.3.0" और cookie_util = { path = "cookie_util"}:
  4. Cargo.toml में दो निर्भरता जोड़ें।
  5. cargo build। पुष्टि करें कि Cargo.lock में लौह के दो संस्करणों की आवश्यकता है।
  6. cargo update -p cookie_util रन 1 और 4 (या अधिक) समय के बीच कहीं भी चलाएं। आखिरकार यह iron 0.4.0 पर निर्भरता को हटा देगा।

मैंने बस इसे rustc-1.10.0/कार्गो-0.11.0 पर परीक्षण किया। मैंने सुनिश्चित किया है कि चरण 1 की शुरुआत में target और Cargo.lock दोनों अनुपस्थित थे।

+2

यह एक समस्या [यहां] (https://github.com/rust-lang/cargo/issues) बनाने के लायक हो सकता है। – squiguy

+1

मैं @squiguy से टिप्पणी दूसरी बार; एक मुद्दा बनाओ। हालांकि, सुनिश्चित करें कि आप समस्या दर्ज करते समय ** [MCVE] ** प्रदान करें। और यहाँ। – Shepmaster

+0

टिप्पणियों के लिए धन्यवाद। मैंने अपने प्रश्नों को थोड़ा सा स्पष्ट करने की कोशिश की है –

उत्तर

5

cargo/issues/2064 की टिप्पणियों के माध्यम से पढ़ना, मुझे एहसास हुआ कि इन प्रकार की निर्भरताओं को हल करने का एक और मजबूत तरीका --precise ध्वज का उपयोग करना है। मेरे उदाहरण के लिए,

cargo update -p iron:0.4.0 --precise 0.3.0 

अनावश्यक निर्भरता को हटा। इसके लिए Cargo.lock में खोदने की आवश्यकता है और मैन्युअल रूप से निर्धारित किया जा सकता है कि निर्भरता कहां एकत्र हो सकती है, लेकिन cargo update -p <pkg> चलाने से बेहतर है और सर्वोत्तम की उम्मीद कर रही है, या मैन्युअल रूप से Cargo.lock संपादित कर रही है।

संबंधित मुद्दे