[Distutils] c extensions: how to rebuild and test quickly
Thomas Heller
theller at ctypes.org
Thu Feb 15 07:58:03 CET 2007
Paul Pogonyshev schrieb:
> Hi,
>
> Distutils create dynamic library for a C extension in `build/...'
> directory. This makes it impossible to run program without
> installing it, which I find very important for developing. Ideally,
> process should look like this:
>
> edit Python code -> test (uninstalled);
>
> or
>
> edit C code -> ./setup.by build -> test (uninstalled).
>
> This is all possible if I create a symbolic link from build
> directory to the sources. Then extension module can be imported
> normally and everything is like it was with all code limited to
> Python.
>
> Is it possible in some standard (and preferably portable) way with
> distutils? Is it already done?
What I do is to create a loader module named <extension>.py that
'replaces' itself with the real extension, loading it via imp
from the platform specific build directory that distutils creates.
Here is the code:
"""
def _boot():
import sys, os, imp
from distutils.util import get_platform
plat_specifier = ".%s-%s" % (get_platform(), sys.version[0:3])
build_dir = os.path.join(os.path.dirname(__file__), 'build', 'lib' + plat_specifier)
file, path, descr = imp.find_module(__name__, [build_dir])
imp.load_module(__name__, file, path, descr)
_boot(); del _boot
"""
Thomas
More information about the Distutils-SIG
mailing list