Модуль 4 · Зависимости и crates.io
Обновление зависимостей
cargo update обновляет зависимости в рамках указанных ограничений. Для мажорных обновлений нужно менять Cargo.toml вручную.
🔧 Практика 🕐 ~20 минут
🔄
cargo update — обновить зависимости
Терминал
cargo update # обновить все зависимости (в рамках ограничений)
cargo update serde # обновить только serde
cargo update --dry-run # показать что изменится, не применяя
ℹ️ Важно: cargo update обновляет только в рамках требований Cargo.toml. Если у вас
serde = "1.0", cargo update может обновить с 1.0.100 до 1.0.219, но НЕ до 2.0. Для мажорного обновления нужно изменить версию в Cargo.toml.После cargo update изменяется только Cargo.lock — в нём обновляются точные версии. Cargo.toml не трогается.
🔒
Cargo.lock и обновления
Cargo.toml — требование
[dependencies]
serde = "1.0" # ^1.0
Говорит: "нужна версия ≥ 1.0, < 2.0"
Cargo.lock — точная версия
[[package]]
name = "serde"
version = "1.0.219"
Фиксирует конкретную версию для воспроизводимости
Когда другой разработчик делает cargo build — он получает ту же версию из Cargo.lock. Если Cargo.lock нет в репозитории — Cargo скачает последнюю совместимую версию.
⬆️
Мажорное обновление — вручную
Если крейт вышел в новой мажорной версии (например, tokio 0.x → 1.x), cargo update не поможет. Нужно:
1
Изменить версию в Cargo.toml
# Было:
tokio = "0.3"
# Стало:
tokio = "1"
2
Запустить cargo build и исправить ошибки
Мажорные версии могут содержать breaking changes — API может измениться.
💡 cargo-outdated — расширение, которое показывает устаревшие зависимости включая мажорные обновления. Установка:
cargo install cargo-outdated. Запуск: cargo outdated.🌳
cargo tree — дерево зависимостей
Терминал
cargo tree # полное дерево всех зависимостей
cargo tree -d # только дублирующиеся зависимости
cargo tree -i serde # кто зависит от serde (инверсный поиск)
Полезно когда нужно понять почему в проекте оказался неожиданный крейт или почему одна и та же библиотека присутствует в двух версиях.
📌 Что важно запомнить
→ cargo update — обновляет в рамках ограничений в Cargo.toml, изменяет Cargo.lock
→ Мажорные обновления — вручную менять версию в Cargo.toml
→ cargo tree — показывает всё дерево зависимостей
→ cargo outdated — найти устаревшие версии (нужно установить)
Тест
3 вопроса