2009-04-02 6 views
98

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

このようなモジュールの特定の例は、libxsltおよびlibxml2です。

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

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

もっと良い解決策はありますか?

答えて

7

私はハッシュから離れています。使用されているlibxsltのバージョンには、使用に影響を与えない種類のパッチが含まれている可能性があります。

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

'version'属性が定義されていないモジュールの場合は、そのクラスとメソッドに含まれるインターフェイスを調べ、期待するインターフェイスと一致するかどうかを確認できます。次に、実際に作業しているコードでは、サードパーティのモジュールに期待するインターフェイスがあると仮定します。

7

いくつかのアイデア:

  1. が存在したり、必要なバージョンに存在しない機能をチェックしてください。
  2. 機能の違いがない場合は、関数の引数とシグネチャを調べます。
  3. ファンクションシグネチャからそれを把握できない場合は、インポート時にいくつかのスタブコールを設定し、その動作を確認してください。
213

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

>>> import pkg_resources 
>>> pkg_resources.get_distribution("blogofile").version 
'0.7.1' 
+8

また、パッケージ名はPyPIエントリのものでなければなりません。 "pkg_resources.get_distribution( 'MySQLdb')。version"は動作しませんが、 "pkg_resources.get_distribution( 'mysql-python')。version"が実行されます。 – Rahul

+1

絶対ファイル名で実行している場合、 'pkg_resources'は' PYTHONPATH'などの優先順位が高いため、実際に実行しているバージョンと異なるバージョンを選択する可能性があります。 – tripleee

+3

誰かが '__version__'属性を作る方法を知りたいと思っている人のために:http://stackoverflow.com/q/17583443/562769 –

2

あなたは、要件の形式でインストールされたパッケージを参照してください

pip freeze 

を使用することができます。

関連する問題