views:

2549

answers:

2

Many 3rd party python modules have an attribute which holds the version info for the module (usually something like module.VERSION or module.__version__), however some do not.

Particular examples of such modules are libxslt and libxml2.

I need to check that the correct version of these modules are being used at runtime. Is there a way to do this?

A potential solution wold be to read in the source at runtime, hash it, and then compare it to the hash of the known version, but that's nasty.

Anybody got any better solutions?

+4  A: 

Some ideas:

  1. Try checking for functions that exist or don't exist in your needed versions.
  2. If there are no function differences, inspect function arguments and signatures.
  3. If you can't figure it out from function signatures, set up some stub calls at import time and check their behavior.
Richard Levasseur
+1  A: 

I'd stay away from hashing. The version of libxslt being used might contain some type of patch that doesn't effect your use of it. As an alternative, I'd like to suggest that you don't check at run time (don't know if that's a hard requirement or not). For the python stuff I write that has external dependencies (3rd party libraries), I write a script that users can run to check their python install to see if the appropriate versions of modules are installed. For the modules that don't have a defined 'version' attribute, you can inspect the interfaces it contains (classes and methods) and see if they match the interface they expect. Then in the actual code that you're working on, assume that the 3rd party modules have the interface you expect.

Mark Roddy