[Distutils] why does pkg_resources call imp.load_module?

P.J. Eby pje at telecommunity.com
Thu Feb 19 16:31:30 CET 2009

At 02:06 PM 2/19/2009 +0000, Karsten Petersen wrote:
>I'm trying to make Google App Engine work smoothly with setuptools 
>and I'm struggling to understand one specific piece of what 
>pkg_resources does.  Would you mind giving me a hint?
>The question is basically:  Why does _handle_ns() in pkg_resources 
>import other modules that implement the same namespace.  It's not 
>using the module handle that is returned.  I looked for side effects 
>but the only ones I found was that exceptions are raised if the 
>other modules are broken and that the modules __file__ var is 
>changed to point to the last found module that implements the 
>namespace in question.
>What am I missing?

In the unlikely event that one of the __init__.py's contains anything 
other than namespace setup code, loading the module ensures that it 
will be run.  This was done for compatibility with older packages 
that use distutils hacks to create a namespace package.  (i.e., 
shipping one package with the __init__.py, and the rest without 
it).  Such packages need to have their __init__.py code run.

It probably won't hurt anything too badly to leave it out, since it's 
strictly for compatibility with a configuration that's deprecated 
anyway.  (At least, it's deprecated for setuptools.)

More information about the Distutils-SIG mailing list