134

多くのサードパーティの Python モジュールには、モジュールのバージョン情報を保持する属性 (通常はmodule.VERSIONまたはのようなものmodule.__version__) がありますが、そうでないものもあります。

そのようなモジュールの特定の例は、libxslt と libxml2 です。

これらのモジュールの正しいバージョンが実行時に使用されていることを確認する必要があります。これを行う方法はありますか?

潜在的な解決策は、実行時にソースを読み込んでハッシュし、それを既知のバージョンのハッシュと比較することですが、それは厄介です。

より良い解決策はありますか?

4

7 に答える 7

258

pkg_resourcesを使用します。少なくとも PyPI からインストールされたものには、バージョン番号が必要です。

>>> import pkg_resources
>>> pkg_resources.get_distribution("blogofile").version
'0.7.1'
于 2011-02-08T22:54:17.217 に答える
8

私はハッシュから離れます。使用されている libxslt のバージョンには、使用に影響しないある種のパッチが含まれている場合があります。

別の方法として、実行時にチェックしないことをお勧めします (それが難しい要件かどうかはわかりません)。外部依存関係 (サードパーティ ライブラリ) を持つ私が書いた Python のものについては、適切なバージョンのモジュールがインストールされているかどうかを確認するために、ユーザーが Python のインストールをチェックするために実行できるスクリプトを書きます。

'version' 属性が定義されていないモジュールについては、モジュールに含まれるインターフェイス (クラスとメソッド) を検査し、期待するインターフェイスと一致するかどうかを確認できます。次に、作業中の実際のコードで、サードパーティ モジュールが期待どおりのインターフェイスを備えていると想定します。

于 2009-04-02T17:02:16.617 に答える
6

いくつかのアイデア:

  1. 必要なバージョンに存在する、または存在しない機能をチェックしてみてください。
  2. 関数に違いがない場合は、関数の引数とシグネチャを調べます。
  3. 関数のシグネチャから判断できない場合は、インポート時にいくつかのスタブ呼び出しを設定し、その動作を確認してください。
于 2009-04-02T16:58:33.053 に答える