https://nixos.org/manual/nixpkgs/stable/#ssec-stdenv-dependent-reference説明する
他の転移的(非直接)下流の依存関係も直接依存関係として要求する場合、依存関係が伝播されると言われています。
「ダウンストリーム」と「アップストリーム」の依存関係はどういう意味ですか?
「間接」依存関係と「直接」依存関係は何ですか?
依存関係の概念はパッケージの依存関係間で依存関係を伝播しますか?
はいや図で説明できますか?
答え1
「ダウンストリーム」と「アップストリーム」の依存関係はどういう意味ですか?
のようにMC68020の回答、パッケージA、B、Cを使用します。ここで、AはBに依存し、Bは再びCに依存します。
A→B→C(依存関係の観点から).
「上流」および「下流」という用語は、変化する流れを指す。
通常、デプロイメント環境では、「アップストリーム」とは、通常、パッケージに提供されるプロジェクトのソースソースを指します。そこで変更が適用され、パッケージが更新され、更新されたプロジェクトが提供されます。
特に依存関係の文脈でCが変更された場合は、Bも変更する必要があり、Aも変更する必要があります。したがって、CはBの上流の依存関係、BはAの上流の依存関係、AはBの下流の依存関係、BはCの下流の依存関係です。
「間接」依存関係と「直接」依存関係は何ですか?
直接依存関係は直接依存関係を意味します。 BはAの直接依存性、CはBの直接依存性です。間接依存関係は転移的依存関係です。 A は B のため C にのみ依存するため、C は A の間接依存関係です。 A が B に依存しないように変更されると、C に依存しなくなります。
依存関係の概念はパッケージの依存関係間で依存関係を伝播しますか?
依存性の反映の伝播多様性依存関係ツリーから。から始まる
A→B→C
上記で、AがCの一部の機能を使用するように変更された場合、Cに直接依存します。
A→B→C
A→C
C の観点からは、以前の間接依存関係 A は直接依存関係として必要であるため、依存関係は「伝播」されています。伝播は C または依存ツリーに依存せず、A の変更の結果です。
これらの変更は目立たない可能性があるため、記録しておくことが重要です。 BはCに依存するため、AはCの機能に「無料」でアクセスできます。したがって、AがCを直接使用し始めると、パッケージングの変更は必要なく、Aは通常どおり構築し続けます。しかし、Aの直接依存関係リストは現在不完全であり、Bが後でCの依存関係を削除すると、Aから何も変更されていない場合でも、Aはビルドを停止します。
答え2
簡単に言えば、A、B、CはそれぞれパッケージA、パッケージB、パッケージCを表す。
AがBに依存する場合、Aの一部のコードがBで定義されている外部参照を取得することを意味します。
AがBに依存し、A自体がCに依存すると仮定します。
Bの場合、Aは次のように言うことができます。上流(ある人はAと呼ぶことがあります。リバース依存性B)と下流。
B だと言える。即時Aの依存性。
しかし、BはCに依存するので、Cは次のように言うことができます。間接的な 依存関係。これが正しい場合、CはAへの外部参照を定義しないためです。 AはCのすべての美徳に依存します。転移性(数学的意味では、A - >(とにかくB - > C = > A - > Cに関連する)
さて、AもCに依存すると仮定しましょう。 glibcを最も一般的な例として考えることができます。 (Aが依存する他のライブラリもglibcに依存しているため、Aの一部のコードはいくつかのglibc関数を呼び出す可能性があります。
これにより、CはAとBの直接的な依存関係になります。この場合、Cの依存関係を呼び出します。広げる。
困難な状況が発生する可能性があり、これによって一部の結果が生じる可能性があります。
あいまいな/混乱
計算計算:A - > B - > C - > D - > Bの場合
Aの直接依存性であるBはDの直接依存性でもあり、DはBの間接依存性でもあります。その結果(OPにリンクされているページ参照のように)
依存関係の転移的閉鎖