$ sudo teach IT
Модуль 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 вопроса