FAQ

[Cython] setup.py refusing to run cython

Lisandro Dalcin
Jun 14, 2011 at 7:39 pm

On 14 June 2011 16:20, Nathaniel Smith wrote:
Hello Cython folks,

This message (see below) is the second report I've gotten of a very
strange build problem with a cython module. I'm just using the
standard 'from Cython.Distutils import build_ext', 'cmdclass =
{"build_ext": build_ext}' incantation, but for some reason setup.py is
attempting to just run gcc directly without calling cython first to
generate the .c file.

You can see the setup.py here:
?https://code.google.com/p/scikits-sparse/source/browse/setup.py?name=scikits.sparse-0.1

Anyone have any ideas?
Your setup.py is mixing setuptools and Cython.Distutils. Both are
monkeypatching distutils, and in general that's a very bad idea.


--
Lisandro Dalcin
---------------
CIMEC (INTEC/CONICET-UNL)
Predio CONICET-Santa Fe
Colectora RN 168 Km 472, Paraje El Pozo
3000 Santa Fe, Argentina
Tel: +54-342-4511594 (ext 1011)
Tel/Fax: +54-342-4511169
reply

Search Discussions

3 responses

  • Robert Bradshaw at Jun 14, 2011 at 7:54 pm

    On Tue, Jun 14, 2011 at 12:39 PM, Lisandro Dalcin wrote:
    On 14 June 2011 16:20, Nathaniel Smith wrote:
    Hello Cython folks,

    This message (see below) is the second report I've gotten of a very
    strange build problem with a cython module. I'm just using the
    standard 'from Cython.Distutils import build_ext', 'cmdclass =
    {"build_ext": build_ext}' incantation, but for some reason setup.py is
    attempting to just run gcc directly without calling cython first to
    generate the .c file.

    You can see the setup.py here:
    ?https://code.google.com/p/scikits-sparse/source/browse/setup.py?name=scikits.sparse-0.1

    Anyone have any ideas?
    Your setup.py is mixing setuptools and Cython.Distutils. Both are
    monkeypatching distutils, and in general that's a very bad idea.
    One way to get around this is to use
    http://wiki.cython.org/enhancements/distutils_preprocessing

    - Robert
  • Stefan Behnel at Jun 15, 2011 at 7:18 am

    Lisandro Dalcin, 14.06.2011 21:39:
    On 14 June 2011 16:20, Nathaniel Smith wrote:
    Hello Cython folks,

    This message (see below) is the second report I've gotten of a very
    strange build problem with a cython module. I'm just using the
    standard 'from Cython.Distutils import build_ext', 'cmdclass =
    {"build_ext": build_ext}' incantation, but for some reason setup.py is
    attempting to just run gcc directly without calling cython first to
    generate the .c file.

    You can see the setup.py here:
    https://code.google.com/p/scikits-sparse/source/browse/setup.py?name=scikits.sparse-0.1

    Anyone have any ideas?
    Your setup.py is mixing setuptools and Cython.Distutils. Both are
    monkeypatching distutils, and in general that's a very bad idea.
    Specifically, "setuptools" checks the list of source files and when it sees
    a .pyx extension, it checks if Pyrex (!) is installed. If not, which is
    rather unlikely for Cython users, it changes the file extension to ".c",
    thus preventing Cython from compiling it.

    There are two ways around this. The ugly way is to put a fake Pyrex into
    sys.path during installation, e.g.

    https://github.com/lxml/lxml/tree/master/fake_pyrex

    A better way is to switch from "setuptools" to "distribute".

    Stefan
  • Nathaniel Smith at Jun 15, 2011 at 3:59 pm

    On Wed, Jun 15, 2011 at 12:18 AM, Stefan Behnel wrote:
    Lisandro Dalcin, 14.06.2011 21:39:
    On 14 June 2011 16:20, Nathaniel Smith wrote:

    Hello Cython folks,

    This message (see below) is the second report I've gotten of a very
    strange build problem with a cython module. I'm just using the
    standard 'from Cython.Distutils import build_ext', 'cmdclass =
    {"build_ext": build_ext}' incantation, but for some reason setup.py is
    attempting to just run gcc directly without calling cython first to
    generate the .c file.

    You can see the setup.py here:

    ?https://code.google.com/p/scikits-sparse/source/browse/setup.py?name=scikits.sparse-0.1

    Anyone have any ideas?
    Your setup.py is mixing setuptools and Cython.Distutils. Both are
    monkeypatching distutils, and in general that's a very bad idea.
    Specifically, "setuptools" checks the list of source files and when it sees
    a .pyx extension, it checks if Pyrex (!) is installed. If not, which is
    rather unlikely for Cython users, it changes the file extension to ".c",
    thus preventing Cython from compiling it.

    There are two ways around this. The ugly way is to put a fake Pyrex into
    sys.path during installation, e.g.

    https://github.com/lxml/lxml/tree/master/fake_pyrex
    Right, I'm already doing that, and it works for me...but not for all
    my users, I guess?
    A better way is to switch from "setuptools" to "distribute".
    Right, I'd just switch to plain distutils except this package uses the
    'scikits' namespace package, and IIUC distutils can't handle namespace
    packages.

    I'm finding the docs for 'distribute' a bit confusing, though. Is the
    way that I switch from 'setuptools' to 'distribute' to just leave my
    code the same, and tell my users to install distribute? That seems
    kind of error prone...

    -- Nathaniel

Related Discussions

Discussion Navigation
viewthread | post