Extension modules are specified using the ext_modules option. package_dir has no effect on where extension source files are found; it only affects the source for pure Python modules. The simplest case, a single extension module in a single C source file, is:
<root>/
setup.py
foo.c
from distutils.core import setup
setup(name='foobar',
version='1.0',
ext_modules=[Extension('foo', ['foo.c'])],
)
If the extension actually belongs in a package, say foopkg, then
With exactly the same source tree layout, this extension can be put in the foopkg package simply by changing the name of the extension:
from distutils.core import setup
setup(name='foobar',
version='1.0',
ext_modules=[Extension('foopkg.foo', ['foo.c'])],
)
See About this document... for information on suggesting changes.