一部のパッケージをフォローしていると、バージョンの非互換性が頻繁に発生すると思いますが、バージョン間の依存関係はわかりません。今日はツールを紹介します。pipdeptree
pipdeptree は、インストールされている pip パッケージとその依存関係を表示するために使用される Python パッケージです。パッケージ間の依存関係がツリー構造で表示され、開発者がプロジェクトの依存関係を理解し、管理するのに役立ちます。
インストール:
1. インストール:
pip install pipdeptree コマンドを使用してインストールします。
2. すべての依存関係を表示します。
pipdeptree コマンドを使用して、インストールされているすべてのパッケージとその依存関係を表示します。
3. 特定のパッケージの依存関係を表示します。
pipdeptree -p <package_name> コマンドを使用して、特定のパッケージの依存関係を表示します。
4. どのパッケージが特定のパッケージに依存しているかを確認します。
pipdeptree -r -p <package_name> コマンドを使用して、どのパッケージが特定のパッケージに依存しているかを確認します。
5. 要件ドキュメントを生成します。
pipdeptree --freeze コマンドを使用すると、pip freeze と同様の出力が生成されますが、依存関係情報が含まれます。
例えば:
上の図でわかるように、onnx==1...13.0 をインストールしたときに、非互換性の問題が発生しました。tensorboard と protobuf のバージョンには互換性がないことに注意してください。 は、互換性のある tensorboard と protobuf のバージョンを表示します。 tensorboard と onnx の両方で protubuf が高すぎることがわかりますので、この時点で protobuf のバージョンを下げます。 protobuf バージョンをインストールすると、onnx と互換性のある protobuf の範囲が protobuf [required: >=3.20.2,<4, installs: 3.20.3] であることがわかります。したがって、protobuf のスコープを減らすだけでは十分ではありません。この時点で、onnx のバージョンを減らします。 onnx を 1.12.0 に減らすと、protobuf をインストールすると、互換性が失われます。エラーが発生しました。このとき、pipdeptree -p onnx で protobuf が互換範囲内であることがわかります。警告が表示されることがわかります:
* twisted==23.10.0
- zope-interface [required: >=5, installed: ?]
上記のプロセスを続けて、まず互換性のあるバージョンのツイストを確認します。実際、この zope.interface はすでにインストールされていますが、なぜツイストがそれを認識できないのかわかりません。改めてTwisted.zope.interfaceと互換性を持たせてみましたが、やはり動作せず、認識されません。
過去の経験から、Twistedバージョンはおそらく可能性があると感じています新しすぎます。確認したところ、
であることが判明したので、Twisted のバージョンを下げてみました。Twisted のバージョンをどのバージョンに下げるべきか疑問があるかもしれません。私の個人的な経験では、< /span> pipdeptree -p が再び変更され、非互換性の警告は表示されないことがわかります。 ご覧のとおり、zope.interface5.5.2 と同じ時期にリリースされたツイスト バージョンは 22.10.0 です。そこで、このバージョンにダウングレードしました。 、ぜひ皆さんも試してみることをお勧めします。たとえば、Twist には zope.interface との互換性の問題が常にありましたが、zope.interface5.5.2 のリリース時期を確認できます。 は、パッケージのリリース時期に関連するバージョンに関連している必要があります。これは私の個人的な経験であり、常にうまく機能しています。互換性の問題がある場合、同様のパッケージをインストールする場合リリース時には、互換性の問題はほとんど発生しません。
洞察:
パッケージ間に互換性がない場合は、リリース時間が似ているバージョンをインストールすることを強くお勧めし、リリース時間が離れすぎないようにすることを強くお勧めします。これは私が実際に行ってきたことであり、毎回完璧に解決されています。依存パッケージ間のリリース時間が長くなるほど、非互換性の問題が発生する可能性が高くなります。たとえば、上記のTwisted インターフェイスと zope.interface には、リリースから 1 年後に互換性の問題がありました。