手動編集
Iron をチェックアウトし、変更Cargo.toml
してバージョンを指定できます (既に行ったように)。次に、プロセスを繰り返し、 をチェックアウトしurl
、その を変更してから、Iron の でCargo.toml
自分のバージョンの を使用していることを確認します。すすいで繰り返します。url
Cargo.toml
パッチのオーバーライド
貨物のドキュメントから:
の[patch]
セクションをCargo.toml
使用して、他のコピーとの依存関係をオーバーライドできます。[dependencies]
構文は次のセクションに似ています。
[patch.crates-io]
foo = { git = 'https://github.com/example/foo' }
bar = { path = 'my/local/bar' }
ソースには、存在しないバージョンのクレートでパッチを適用できます。また、既存のクレートのバージョンでソースにパッチを適用することもできます。ソースに既に存在するクレート バージョンでソースにパッチが適用された場合、ソースの元のクレートは置き換えられます。
パスのオーバーライド
貨物のドキュメントから:
一時的にクレートで作業しているだけで、上記のセクションのCargo.toml
ように変更する必要がない場合があります。このユースケースのために、Cargo はパスオーバーライド[patch]
と呼ばれる、より制限されたバージョンのオーバーライドを提供します。
パスのオーバーライドは、.cargo/config.toml
の代わりに経由で指定されますCargo.toml
。.cargo/config.toml
あなたの中で、というキーを指定しますpaths
:
paths = ["/path/to/uuid"]
特定のバージョン
Rust バージョンで動作することがわかっている各依存関係のバージョン (または SHA ハッシュ) を単純に指定できる場合があります。Cargo は推移的な依存関係を解決し、すべての要件に適合するバージョンがあれば、以前のバージョンにロックできるはずです。
または、 を使用cargo update -p somecrate --precise major.minor.patch
してクレートの正確なバージョンを指定し、Cargo.lock
.
これはすべての場合に機能するとは限りません。Rust は、1 つのバイナリにコンパイルされた同じライブラリの複数のバージョンを持つことができます。これは、すべてに適用されるバージョンを指定できる場所が 1 つもないことを意味します。
報奨金への対処
ジョンは次のように付け加えます。
zstd に依存するクレートがあります。zstd は zstd-safe に依存します。zstd-safe は zstd-sys に依存します。私のクレートは、C ライブラリとして zstd もリンクする C++ バイナリにリンクされます。zstd C ライブラリと zstd-sys によって販売されている zstd のバージョンは、正確に一致する必要があります。そうしないと、リンク エラーが発生します。だから私はzstd-sysの正確なバージョンを固定したい
このケースは、上記の「特定のバージョン」の例に従うことができますが、zstd-sysはlinks
キーを使用するため、クレート グラフ全体でそのクレートが1 つだけ存在する可能性があります。つまりzstd-sys
、トップレベルの依存関係を追加して、競合するバージョンが導入された場合に Cargo が文句を言うことに安心できるということです:
[dependencies]
zstd = "0.9.0"
zstd-sys = "=1.6.1"
これを編集してバージョン 1.6.0 を指定すると、エラーが発生します。
error: failed to select a version for `zstd-sys`.
... required by package `zstd-safe v4.1.1+zstd.1.5.0`
... which is depended on by `zstd v0.9.0+zstd.1.5.0`
... which is depended on by `so v0.1.0 (/private/tmp/so)`
versions that meet the requirements `=1.6.1` are: 1.6.1+zstd.1.5.0
the package `zstd-sys` links to the native library `zstd`, but it conflicts with a previous package which links to `zstd` as well:
package `zstd-sys v1.6.0+zstd.1.5.0`
... which is depended on by `so v0.1.0 (/private/tmp/so)`