TL; DR Отредактируйте Cargo.lock
вручную, пожалуйста, проверьте заголовок ниже: Как заставить машину go использовать дернутую версию суб-зависимости (для правильной шаги)
Почему это происходит?
Это произошло потому, что в err-derive-0.1.6
используется quote-1.0.2
в качестве зависимости, но в cargo.toml
зависимости объявлено так:
[dependencies.quote]
version = "1.0.2"
Это означает, что машина go будет использовать последнее незначительное обновление, поэтому, если quote-1.0.3
выйдет, то машина go будет использовать 1.0.3
вместо 1.0.2
. Пожалуйста, проверьте Требование к каретке . Проблема в том, что quote-1.0.3
нарушает обратную совместимость с quote-1.0.2
. В этом случае цитата
Как заставить машину go использовать указанную c версию суб-зависимости
Эту проблему можно исправить, если заставить суб-зависимость использовать совместимую версию для ваша зависимость. Эта команда сделает это:
> cargo update -p quote --precise 1.0.2
Как заставить машину go использовать выдернутую версию зависимостей
Похоже, quote-1.0.2
выдернули из crates.io, поэтому команда выше не будет работать, потому что машина go не сможет найти янкированную версию на crates.io. Так как обновление машины go изменяет cargo.lock
, мы можем сделать это вручную. Чтобы начать очистку:
- Удалить
Cargo.lock
- Запустить
cargo update
(будет сгенерирована последняя версия Cargo.lock
) - Редактировать
Cargo.lock
Найдите несовместимую версию пакета в автомобиле go .lock, которая quote-1.0.3
. Она должна выглядеть следующим образом:
[[package]]
name = "quote"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
]
, затем просто измените версию на совместимую версию в нашем если это "1.0.2"
[[package]]
name = "quote"
version = "1.0.2"
После этого не запускайте обновление машины go снова, оно заменит ваши изменения, и вы не сможете скомпилировать ваш проект. Пожалуйста, помните, что это обходной путь для возможности продолжения разработки, есть причина дергать ящики, не используйте его в производстве, лучше подождать, пока зависимые ящики обновятся.
Примечание: В некоторых случаях вы можете получить ошибку после редактирования cargo.lock
:
error: Found argument 'Cargo.lock' which wasn't expected, or isn't valid in this context
@ albus_ c исправлено это делает :
Примечание для потомков: я исправил проблему с удалением ржавчины c (sudo apt remove rustc
) и переустановил, как рекомендовано на веб-сайте Rust, curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
После этого все заработало отлично.