New submission from JimC <[email protected]>:

We discovered a minor problem with setuptools.extension.py that prevents being 
able to incrementally build extenion modules when working with Cython (meaning, 
edits to source do NOT result in a call to the cython compiler).  

A patch is attached to this ticket.

The problem is the extension.Extension() class has logic that alters the 
filename the sources[] list if Pyrex is not installed.  The code has a simple 
boolean test if Pyrex is installed, and if not, it remaps the extension from 
".pyx" -> ".c".  

I believe the simple solution is to perform the same logic for Cython (to set a 
boolean if Cython is available, and to NOT remap the source extension if either 
Pyrex OR Cython is installed).

Example to demonstrate the problem:

setup('project',
    ...,
    ext_modules = Extension('Prj', ['Prj/pr1.pyx']),
    ...,
    cmdclass = {'build_ext': Cython.Distutils.build_ext},
    ...,


With a setup.py like this, the setuptools.extension.Extension class will 
re-write the sources[] list BEFORE the Cython.Distutils.build_ext module can 
get a shot at it.

The result is that subsequent edits of 'Prj/pr1.pyx' will cause build_ext to 
skip the cython compile step.  The only work around to force a recompile is to 
delete the contents of the 'build/' folder.

See the suggested patch for our request for modification.

Thanks

----------
files: extension.patch
messages: 658
nosy: [email protected]
priority: bug
status: unread
title: setuptools.extension incompatible w/ Cython (patch included)
Added file: http://bugs.python.org/setuptools/file80/extension.patch

_______________________________________________
Setuptools tracker <[email protected]>
<http://bugs.python.org/setuptools/issue138>
_______________________________________________
--- \ORIGINAL\setuptools\extension.py    Wed Sep 20 17:05:02 2006
+++ \REVISED\setuptools\extension.py     Tue Jun 12 16:35:08 2012
@@ -1,15 +1,17 @@
 from distutils.core import Extension as _Extension
 from dist import _get_unpatched
 _Extension = _get_unpatched(_Extension)

+have_pyrex = True
 try:
     from Pyrex.Distutils.build_ext import build_ext
 except ImportError:
-    have_pyrex = False
-else:
-    have_pyrex = True
+    try:
+        from Cython.Distutils.build_ext import build_ext
+    except ImportError, exc:
+        have_pyrex = False


 class Extension(_Extension):
     """Extension that uses '.c' files in place of '.pyx' files"""
_______________________________________________
Distutils-SIG maillist  -  [email protected]
http://mail.python.org/mailman/listinfo/distutils-sig

Reply via email to