我有一個項目具有對iron>= 0.3, <= 0.4
的依賴關係(cookie工具)。合併貨物依賴關係
我的項目依賴鐵0.3
(所以我可以使用router
中間件,尚未更新到最新的鐵)。
當我嘗試編譯我的項目時,cookie實用程序會拉動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能夠很好地支持這一點會更好,這樣圖書館就可以讓他們的依賴版本範圍保持開放,因爲它們的功能允許。
與此同時,我發現這個「詭計」,似乎做我想要的(cargo update -p <pkg>
)。我沒有看起來超級難過,但這種行爲似乎沒有在任何明顯的地方描述。我的第二個問題是:這是合併依賴關係的有效方法嗎?有什麼地方可以找到關於這方面的更多信息嗎?
和步驟重現:
- 創建一個新項目:
cargo new --bin ironapp
;cd ironapp
。 - 創建cookie依賴關係:
cargo new cookie_util
。 - 在
cookie_util/Cargo.toml
添加一個依賴項:iron = ">= 0.3, <= 0.4"
。 - 在
Cargo.toml
中添加兩個依賴項:iron = "0.3.0"
和cookie_util = { path = "cookie_util"}
。 cargo build
。確認Cargo.lock
需要兩種鐵質版本。- 運行
cargo update -p cookie_util
任何地方在1和4(或更多)次之間。最終它將消除對iron 0.4.0
的依賴。
我剛剛在rustc-1.10.0/cargo-0.11.0上測試了這個。我確信target
和Cargo.lock
都沒有在第1步的開始。
這可能值得創建一個問題[這裏](https://github.com/rust-lang/cargo/issues)。 – squiguy
我第二次來自@squiguy的評論;創建一個問題。但是,請確保您在提交問題時提供[MCVE] **。和這裏。 – Shepmaster
感謝您的意見。我試圖澄清我的問題 –