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

Phillip J. Eby pje at telecommunity.com
Wed Dec 8 19:20:23 CET 2004


At 12:19 PM 12/8/04 -0500, Bob Ippolito wrote:
>>I suppose if the path is relative to some executable, then you could 
>>still do that at runtime.
>
>How does an application say something about what it wants before it 
>starts?  Do we expect every application developer to write a 
>darwin-specific boot script?  Do we force a "boot" script (think something 
>like Twisted's "twistd") for every platform so that things like this can 
>be accommodated?

Well, it's better than nothing.  My long-term thinking is that you'd have a 
platform-specific way to launch an "application plugin" that represents the 
actual application, in the same way that on Windows you can double-click a 
.jar file to run a Java application.  Once that bootstrap facility is 
available on the platform, then theoretically a given app can just be 
launched that way.

But I do see your general point.  Clearly library deployment on Darwin is a 
pain in the rear.  I'm glad you're following it, because it's completely 
over my head at this point.




>>>How about we include a manifest file that includes filename, size, and a 
>>>hash of the file's contents, and has the author's public key in there 
>>>somewhere at the top or bottom.  A second file, or a SMIME or PGP style 
>>>wrapper around the manifest file, will contain the hash of the manifest 
>>>file that is signed by the author's private key.
>>
>>I like this.  Specifically, I like the part that it's a separate and 
>>optional file, so it doesn't  hold up the base format definition.  We 
>>just need to be able to define how metadata files like this get included 
>>in the format, so that other metadata files (like a Chandler Parcel 
>>schema, or a Zope ZCML file) would be includable also.  Then, the 
>>bdist_plugin command would just package up those files, possibly after 
>>optionally generating the signature manifest.
>
>What about something like this:
>
>myplugin.pyplugin
>     metadata/
>         MANIFEST-1.0
>     share/
>         mypackage.zcml
>     purelib/
>         mypackage/
>             __init__.py
>     platlib/
>         os-and-python-version-specific-string/
>             mypackage/
>                 extmodule.so
>     lib/
>         os-and-python-version-specific-string/
>             extmoduledependency.dylib
>
>This should more or less allow for someone to create a "fat" plugin that 
>has platform-specific dependencies, but includes them for multiple platforms.

I'd prefer to be able to use a plugin archive (.par, anyone?) directly with 
zipimport in the case that it's a pure Python archive (or if it's on some 
hypothetical platform that can load extensions from a zipfile).  Ideally, 
also, one should also be able to unzip a .par directly into site-packages 
or a subdirectory thereof and use it.  Thus, I'd prefer to see an internal 
layout that's something more like:

     mypackage/
        __init__.py

     extmodule.so
     extmoduledependency.dylib

     __metadata__/
        myplugin-0.1.2/
           MANIFEST-1.0
           signature.smime   (???)
           configure.zcml

Since this layout is "safe" to unzip into a common location for multiple 
plugins (i.e., the metadata won't be overridden by a different package or 
version thereof).  I don't currently see a strong use case for "fat" 
plugins, as distutils cross-compilation capability is limited, which would 
make it really hard to build a fat plugin.  And you certainly wouldn't want 
a fat plugin for something like wxPython or Numeric, anyway.  :)


>We should also say that the filenames in the zip file should encoded as 
>utf-8, so we can support unicode filenames.  The zip format itself has no 
>standard for this, and there isn't even a de facto standard.

Sounds good.



More information about the Distutils-SIG mailing list