Я пытаюсь исправить проблему с зависимостями в Rust/Cargo. У меня есть зависимость ctclib-pp, которая, в свою очередь, зависит от ctclib-kenlm-sys, которая, наконец, зависит от bindgen ^0.59.2. Однако из соображений совместимости мне нужно использовать версию 0.60.1 или выше (из-за этого).
Я попробовал внести следующие изменения в свой Cargo.toml, но, похоже, это не сработало, поскольку при этом обе версии устанавливаются рядом друг с другом.
[dependencies]
ctclib-pp = "0.2.0"
[patch.crates-io]
bindgen = { git = "https://github.com/rust-lang/rust-bindgen", tag = "v0.60.1" }
Когда я запускаю cargo update, я получаю следующее уведомление:
warning: Patch `bindgen v0.60.1 (https://github.com/rust-lang/rust-bindgen?tag=v0.60.1#9ca5f856)` was not used in the crate graph.
Check that the patched package version and available features are compatible
with the dependency requirements. If the patch has a different version from
what is locked in the Cargo.lock file, run `cargo update` to use the new
version. This may also occur with an optional dependency that is not enabled.
и файл блокировки теперь содержит неиспользуемый патч
[[patch.unused]]
name = "bindgen"
version = "0.60.1"
source = "git+https://github.com/rust-lang/rust-bindgen?tag=v0.60.1#9ca5f856a35deddde0575002d76d1db4430e6c42"
Любые предложения о том, как переопределить подзависимость?

Вам нужно будет исправить зависимость от bindgen, т. е. ctclib-pp. Скопируйте его и (при условии, что все скомпилируется только с этой модификацией) измените версию bindgen, от которой это зависит. Затем укажите это в своем [patch.crates-io].
Извините, я новичок в Cargo. Можете ли вы указать в коде, что вы имеете в виду? Чтобы еще раз уточнить: мне требуется ctclib-pp , который зависит от ctclib-kenlm-sys, который, наконец, зависит от bindgen ^0.59.2. Я хочу переопределить последний на 0.60.1.
@BramVanroy Затем исправьте ctclib-kenlm-sys (но, возможно, решение @kmdreko лучше).
Вы можете создать форк репозиторияbindgen с версией 0.60.1, отредактировать версию пакета в Cargo.toml до 0.59.2 и использовать ее в разделе [patch].
То есть, по сути, подделка номера версии? Это кажется опасным. Я надеюсь, что есть и другие варианты.
@BramVanroy «Это кажется опасным». Какую опасность вы представляете, которая еще не была очевидна из-за принуждения крейта использовать версию зависимостей, для которой он не был разработан?
Это справедливо, спасибо.
Просто обратите внимание, что
0.59и0.60совершенно несовместимы в том смысле, в каком это определяет груз.