Секция [dependencies]
Как добавлять библиотеки, как указывать версии и что такое Cargo.lock.
cargo add — самый простой способ
Самый быстрый способ добавить зависимость — команда cargo add. Она сама найдёт последнюю версию на crates.io и добавит в Cargo.toml:
cargo add serde # добавить последнюю версию serde
cargo add serde --features derive # добавить с фичей derive
cargo add tokio --features full # tokio со всеми фичами
cargo add --dev pretty_assertions # добавить как dev-зависимость
cargo add rand@0.8 # добавить конкретную версию
После cargo add serde Cargo добавит строку в Cargo.toml:
[dependencies]
serde = "1.0"
"1.0", а не точная версия типа "1.0.197"? Это версионное требование — "1.0" означает «любая версия ≥1.0 и <2.0». Точные правила — ниже в этом уроке.Ручное редактирование Cargo.toml
Можно добавить зависимость прямо в файл. Форматы записи:
[dependencies]
# Краткий формат: имя = "версионное требование"
rand = "0.8"
serde = "1"
# Расширенный формат (таблица): нужен для фич, опций и т.д.
serde = { version = "1", features = ["derive"] }
tokio = { version = "1", features = ["full"] }
# Опциональная зависимость (подробнее в уроке про фичи)
rayon = { version = "1.8", optional = true }
cargo build или cargo run.Версионные требования
В Cargo.toml вы не пишете точную версию — вы пишете требование: какой диапазон версий приемлем. Cargo найдёт подходящую автоматически.
"1.2.3"
"^1.2.3". Означает: ≥1.2.3 и <2.0.0. Разрешает обновление MINOR и PATCH, но не MAJOR. Самый распространённый вариант."^1.2.3"
^0.2.3 = ≥0.2.3 и <0.3.0 (для нестабильного API — более строго). ^0.0.3 = только 0.0.3."~1.2.3"
"=1.2.3"
">=1.2, <2"
"*"
Требование Минимум Максимум (не включая)
"1" 1.0.0 2.0.0
"1.2" 1.2.0 2.0.0
"1.2.3" 1.2.3 2.0.0
"^1.2.3" 1.2.3 2.0.0
"~1.2.3" 1.2.3 1.3.0
"=1.2.3" 1.2.3 1.2.3 (только эта версия)
"0.2" 0.2.0 0.3.0 ← нестабильный API строже
"*" 0.0.0 ∞
Cargo.lock — зачем он нужен
Cargo.toml содержит требования к версиям. Cargo.lock содержит точные версии всего, что Cargo выбрал. Разница важна:
Cargo.toml
Пишете вы вручную. Содержит диапазоны: serde = "1". Читаемый, лаконичный.
Cargo.lock
Генерирует Cargo автоматически. Содержит точные версии: serde 1.0.197, все транзитивные зависимости, хэши. Не редактировать вручную.
Правило для git:
Cargo.lock. Это гарантирует, что у всех в команде и на CI одинаковые версии зависимостей.Cargo.lock в .gitignore. Пользователи библиотеки должны сами разрешать версии, чтобы избежать конфликтов.cargo add имя — добавляет последнюю версию автоматически"1.2" = caret по умолчанию = ≥1.2.0 и <2.0.0~ — только патчи, = — точная версия, * — любая (не рекомендуется)Тест
3 вопроса