[Pyrex] difficulty while importing extension class

Lenard Lindstrom len-l at telus.net
Sun Nov 18 20:38:35 CET 2007


Sat Tara Singh wrote:
> Greetings,
>
> I've been working on a Python project with a cellular automaton engine 
> at its core, and have been busy developing this engine in Pyrex. I ran 
> into an unexpected situation yesterday.
>
> I have compiled a .pyd file name "topology" with an extension class 
> called Topology.
>
> I then tried to use this extension class in a different Pyrex module 
> named "neighborhood".
>
> Here's the code:
>
> ############################
>
> cimport topology as T
>
> cdef class Thing:
>      cdef T.Topology topo
>
>      def __init__(self):
>           self.topo = T.Topology((100,100),2)
>
> ############################
>
> When I tried to compile this I got the following error message:
>
> error: lvalue required as left operand of assignment
>
> So, I looked at the line in the .c file which had raised this error and 
> it read as follows:
>
> ((PyObject *)((struct __pyx_obj_12neighborhood_Thing 
> *)__pyx_v_self)->topo) = __pyx_3;
>
> Having no idea what this means, I did a Google search, read a bug report 
> by Dmitry Marakasov, and changed the code to this:
>
> __pyx_v_self = (struct __pyx_obj_12neighborhood_Thing *)__pyx_3;
>
> This compiled successfully and ran without problems.
>
> Happy as I was to see it work, I'm totally befuddled as to what I did, 
> and decidedly unwilling to dive into C code I'm too dumb to understand 
> every time I want to use an extension class in my project. I wonder if 
> anybody has any feedback on this.
>
> I'm running Pyrex 0.9.3.1 for Windows on a WindowsXP box, under Python 
> 2.5, and using MinGW's gcc as a compiler.
>
>   

This is an older version of Pyrex. It has known issues with newer C 
compilers. Upgrade to the latest Pyrex version.

-- 
Lenard Lindstrom
<len-l at telus.net>




More information about the Pyrex mailing list