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.