[Distutils] c extensions: how to rebuild and test quickly

Phillip J. Eby pje at telecommunity.com
Thu Feb 15 01:04:02 CET 2007


At 01:30 AM 2/15/2007 +0200, Paul Pogonyshev wrote:
>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?

As someone else has mentioned, build_ext --inplace will do the trick.

However, I find it a bit awkward to use, as you have to manually rebuild 
when testing  different Python versions (and/or platforms: I sometimes use 
both Cygwin and Windows Python, for example).

So, setuptools' "test" and "develop" commands (as well as its own version 
of "build_ext --inplace") do the build in the build/ subdirectory, but then 
*copy* the files to the source directory.  Because each build directory has 
its own platform-specific files, this automatically uses the right files 
for the Python version you're running the "test" command with.

It's still not perfect, but it can be a nice improvement over plain 
"build_ext -i" usage.



More information about the Distutils-SIG mailing list