У меня есть проект, у которого есть зависимость (утилита cookie), которая имеет зависимость от iron >= 0.3, <= 0.4
.
Мой проект зависит от железа 0.3
(поэтому я могу использовать промежуточное ПО router
, которое еще не обновлено до последнего железа).
Когда я пытаюсь скомпилировать свой проект, утилита cookie вытаскивает версию железа 0.4
, и я получаю ошибки, так как используются разные версии железа.
Однако я могу сделать:
cargo update -p <cookie utility>
который (обычно) изменяет зависимость пакета от железа в соответствии с той, которую я использую, и удаляет постороннюю зависимость от железа 0.4
. (Необычно, мне иногда приходится запускать эту команду пару раз, прежде чем она обновится.)
По-видимому, я не могу указать зависимую версию зависимости: Установить конкретную версию зависимости зависимости проекта от Cargo.toml или 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.