[Distutils] Standardizing distribution of "plugins" for extensible apps

Phillip J. Eby pje at telecommunity.com
Thu Dec 9 17:31:13 CET 2004

At 05:16 PM 12/9/04 +0100, Thomas Heller wrote:
>"Phillip J. Eby" <pje at telecommunity.com> writes:
> > If so, then that approach is a real winner.  bdist_plugin (or whatever
> > it's called) could create stubs that provide extension loading
> > support, and which would be ignored if the archive was unpacked.  If
> > need be, a support module could be included in the archive's root, so
> > that the stubs don't have to be large.
>This may even be an idea for single-file py2exe: Let the stub unpack the
>extension, maybe in a TMP directory, open the file with
>FILE_FLAG_DELETE_ON_CLOSE (so we don't have to clean up manually), and
>then let the stub load the extension.

Of course, this code is going to be platform-specific, by necessity.  And, 
it should be configurable, so that an application can define a 
non-temporary "cache" directory for the extraction.  The stub loader should 
check for same file date and size as the archived extension(s), and go for it.

We also need to figure out what to do for non-extension 
libraries.  Presumably py2exe doesn't need to do anything special because 
the libraries just install next to the .exe.  But for .dll or non-Python 
.so files, they'll need to be extracted somewhere.

And, the stub loader support module will also need to be able to do the 
header munging for Mac OS X.

Hm.  Maybe we should just have platform-specific stub loader support, since 
we know the target platform at archive build time.  So there could be 
darwin_stubloader, win32_stubloader, and so on.  We just package the right 
one, and write the stubs accordingly.

But just as 'os' and 'os.path' map to e.g. posix and posixpath, we should 
still have a generic stubloader module API so that an application can be 
platform-agnostic about its configuration.  That is, an app that wants to 
support Darwin will need to set any non-default Darwin options it cares 
about, but it shouldn't need to check the platform and import a different 
module to do that.  The platform-specific stubloaders would all support the 
same API and just ignore configuration specific to other platforms.

More information about the Distutils-SIG mailing list