[Distutils] installing .py plugins to an alternate directory

Andrew Dalke dalke at dalkescientific.com
Thu Dec 3 01:06:51 CET 2009


Hi all,

  I'm working with the Akara project. It contains a web server. The server loads extensions from a special directory (let's say "$AKARA" for now). An extension can register handlers for URLs. An example extension might look like:

installs to $AKARA/spam_extension.py
(note: only .py files are supported; not even .pyc files)
=========================
from akara.services import simple_service

import my_spam # This is part of the distribution, and gets put in site-packages

@simple_service("GET", "http://vikings.protocol.id/")
def vikings(say=my_spam.DEFAULT_TEXT):
    return my_spam.vikings(say)
=========================


We want people to be able to distribute Akara plugins and install via setup.py. Ideally I would like to say:

from distutils.core import setup
from akara.distutils ... I'm not sure what here ...

setup(name="Spam services",
      package="my_spam",
      akara_extensions=["spam_extension.py"]
)


To clarify, the development/distribution package looks like:
  $PACKAGE/setup.py
  $PACKAGE/README
  $PACKAGE/spam_extensions.py
  $PACKAGE/my_spam/__init__.py
  $PACKAGE/my_spam/dramatis_personae.py
  $PACKAGE/my_spam/cafe.py

and $PACKAGE/spam_extensions.py goes to $AKARA/spam_extensions.py while $PACKAGE/my_spam is copied to site-packages.

The installation does not need to byte-compile spam_extension.py.

It should also include spam_extension.py in any distribution that it makes.


I looked through the documentation and searched for existing examples, but found nothing which does this. The plugins I found used entry_points, and that's an architecture change which I don't think is appropriate for us.

Suggestions?

I had hoped that I could add my own cmdclasses like "build_akara" and "install_akara" which would get called during the correct stages of the build process, but that seems to be a dead end. I might be able to hack the "install_data" cmdclass to make it work, but that would prevent anyone from using it in their own setup.py distributions.


				Andrew
				dalke at dalkescientific.com




More information about the Distutils-SIG mailing list