On May 7, 2010, at 2:08 PM, Michael Bayer wrote:

I'd only mention that Storm has a C extension/non C extension flag as well, and only offers one source distribution on Pypi.     You have to modify a variable directly within setup.py.  Our setup.py features the same capability (its just our C extension is off by default for 0.6 since it was just written, which is the same case for when Storm first introduced its C extension).

It occurs to me that Twisted has a similar problem (except there's no installation flag: it just builds the C extensions if it possibly can).

The problem I see here is that the dependencies list of a particular project should be a complete expression of the features that the source code requires to function properly.  If a C extension is present for optimization purposes only, then I don't think it ever needs to be mentioned in a dependency listing.  Performance tuning is a build and deployment issue, not a dependency-correctness issue.  However, if a C extension wraps features necessary for an application to work correctly, without which it will simply traceback and die, then it should be possible for the application to say "I depend on this functionality".

After all, it's kind of bogus if I say "I depend on library X", and then library X gets installed, but half of it is missing for some reason.  It's bogus if it's missing for any reason at all, really.  The "C extension couldn't be compiled" one is common, but there are other configuration and build issues which could prevent a distribution from being fully functional.

Is there already a good way to express a dependency on a portion of a source distribution, or "optional" features?  A way to list one source distribution on PyPI so that it will be present under multiple names, one for each optional chunk?