Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I compile Pyparsing with Cython on WIndows?

I tried to compile Pyparsing on my Windows machine but got the following errors:

python setup.py build_ext --inplace
running build_ext
cythoning pyparsing.pyx to pyparsing.c

Error compiling Cython file:
------------------------------------------------------------
...
       If C{include} is set to true, the matched expression is also parsed (the
skipped text
       and matched expression are returned as a 2-element list).  The C{ignore}
       argument is used to define grammars (typically quoted strings and comment
s) that
       might contain false matches.
    """
    def __init__( self, other, include=False, ignore=None, failOn=None ):
                              ^
------------------------------------------------------------

pyparsing.pyx:2764:31: Expected an identifier, found 'include'

Error compiling Cython file:
------------------------------------------------------------
...
    def __init__( self, other, include=False, ignore=None, failOn=None ):
        super( SkipTo, self ).__init__( other )
        self.ignoreExpr = ignore
        self.mayReturnEmpty = True
        self.mayIndexError = False
        self.includeMatch = include
                           ^
------------------------------------------------------------

pyparsing.pyx:2769:28: Expected an identifier or literal
building 'pyparsing' extension
creating build
creating build\temp.win32-2.7
creating build\temp.win32-2.7\Release
C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\cl.exe /c /nologo /Ox /MD /W
3 /GS- /DNDEBUG -IC:\Python27\include -IC:\Python27\PC /Tcpyparsing.c /Fobuild\t
emp.win32-2.7\Release\pyparsing.obj
pyparsing.c
pyparsing.c(1) : fatal error C1189: #error :  Do not use this file, it is the re
sult of a failed Cython compilation.
error: command '"C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\cl.exe"' fa
iled with exit status 2

I did the compilation with Microsoft Visual C++ 2008 Express edition and the Pyparsing module used is the most current version. Please, does anyone know of how to make this work?

like image 209
iChux Avatar asked Nov 14 '13 08:11

iChux


1 Answers

Sir, I did as you've said but there was still a compile time warning:


    python setup.py build_ext --inplace
    running build_ext
    cythoning pyparsing.pyx to pyparsing.c
    warning: pyparsing.pyx:413:8: Unreachable code
    building 'pyparsing' extension
    creating build
    creating build\temp.win32-2.7
    creating build\temp.win32-2.7\Release
    C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\cl.exe /c /nologo /Ox /MD /W
    3 /GS- /DNDEBUG -IC:\Python27\include -IC:\Python27\PC /Tcpyparsing.c /Fobuild\t
    emp.win32-2.7\Release\pyparsing.obj
    pyparsing.c
    C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\link.exe /DLL /nologo /INCRE
    MENTAL:NO /LIBPATH:C:\Python27\libs /LIBPATH:C:\Python27\PCbuild /EXPORT:initpyp
    arsing build\temp.win32-2.7\Release\pyparsing.obj /OUT:C:\Users\iProsper\Desktop
    \pyparsing\pyparsing.pyd /IMPLIB:build\temp.win32-2.7\Release\pyparsing.lib /MAN
    IFESTFILE:build\temp.win32-2.7\Release\pyparsing.pyd.manifest
       Creating library build\temp.win32-2.7\Release\pyparsing.lib and object build\
    temp.win32-2.7\Release\pyparsing.exp
    C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\mt.exe -nologo -manifest build
    \temp.win32-2.7\Release\pyparsing.pyd.manifest -outputresource:C:\Users\iProsper
    \Desktop\pyparsing\pyparsing.pyd;2

The warning is actually in the line 4: warning: pyparsing.pyx:413:8: Unreachable code. I then changed the line to read as:


    def __getattr__( self, name ):
            if True: #name not in self.__slots__:
                if name in self.__tokdict:
                    if name not in self.__accumNames:
                        return self.__tokdict[name][-1][0]
                    else:
                        return ParseResults([ v[0] for v in self.__tokdict[name] ])
                else:
                    return ""
            else:
                return None

and then recompiled it. One thing I noticed is that even with the warning and the edit I made, both of them compiled successfully but when when I tried to test it with the following code:


    from pyparsing import Word, alphas
    greet = Word(alphas) + ',' + Word(alphas) + '!'
    greeting = greet.parseString('Hello, World!')
    print greeting

I got the following error:


    Traceback (most recent call last):
      File "C:\nwaomachux\build_pyparsing\checkout.py", line 1, in 
        from pyparsing import Word, alphas
      File "pyparsing.pyx", line 3414, in init pyparsing (pyparsing.c:100064)
    AttributeError: 'builtin_function_or_method' object has no attribute 'ANY_VALUE'

I would have altered the file further and sent it to you to check it out but I'm only some few hours old with Pyparsing, so I've yet to get a grasp of the full source code.

I wouldn't know what the effect(s) of moving withAttribute.ANY_VALUE = object() to the beginning of def withAttribute(args,*attrDict): function signify. Please, what's the fix to it? Thanks.

like image 126
iChux Avatar answered Sep 18 '22 05:09

iChux