[Numpy-discussion] Recommended way to add Cython extension using numpy.distutils?

Matthew Brett matthew.brett at gmail.com
Wed Apr 28 15:01:00 EDT 2010


Hi,

Thanks a lot for the suggestion - I appreciate it.

>> Is there a recommended way to plumb Cython into the numpy build
>> machinery?  Should I try and patch numpy distutils to use Cython if
>> present?
>>
>
> Here is the monkey-patch I'm using in my project:
> def evil_numpy_monkey_patch():
>   from   numpy.distutils.command import build_src
>   import Cython
>   import Cython.Compiler.Main
>   build_src.Pyrex = Cython
>   build_src.have_pyrex = True

I think this patch does not work for current numpy trunk;  I've put a
minimal test case here:

http://github.com/matthew-brett/du-cy-numpy

If you run the setup.py there (python setup.py build) then all works
fine for - say - numpy 1.1.  For current trunk you get an error ending
in:

  File "/Users/mb312/usr/local/lib/python2.6/site-packages/numpy/distutils/command/build_src.py",
line 466, in generate_a_pyrex_source
    if self.inplace or not have_pyrex():
TypeError: 'bool' object is not callable

which is easily fixable of course ('build_src.have_pyrex = lambda :
True') - leading to:

  File "/Users/mb312/usr/local/lib/python2.6/site-packages/numpy/distutils/command/build_src.py",
line 474, in generate_a_pyrex_source
    import Pyrex.Compiler.Main
ImportError: No module named Pyrex.Compiler.Main

I'm afraid I did a rather crude monkey-patch to replace the
'generate_a_pyrex_source' function.  It seems to work for numpy 1.1
and current trunk.  The patching process is here:

http://github.com/matthew-brett/du-cy-numpy/blob/master/matthew_monkey.py

Best,

Matthew



More information about the NumPy-Discussion mailing list