2017-07-15 7 views
1

J'ai du mal à installer pymunk sur mon Ubuntu 16.04. J'utilise virtualenv, j'ai installé Python 3.5.2, pymunk 5.3.0 et cffi 1.11.0.Pymunk dessin utils ne fonctionne pas

J'ai d'abord essayé un code très simple; Fondamentalement, j'ai créé un vide Space et a appelé step dessus et tout a fonctionné sans heurt. Cependant, lorsque j'essaie de le visualiser et de créer l'instance DrawOptions, j'obtiens des erreurs étranges, que je ne peux pas déchiffrer. En outre, j'ai essayé matplotlib_util et pygame_util, mais les deux n'ont pas réussi à créer DrawOptions.

Ceci est l'extrait de code je:

import pymunk 
    import pyglet 
    import pymunk.pyglet_util 

    s = pymunk.Space() 
    options = pymunk.pyglet_util.DrawOptions() 

    s.debug_draw(options) 

    # s.step(0.02) 

Ceci est la sortie je reçois:

Loading chipmunk for Linux (64bit) [/home/wm/.virtualenvs/cv/lib/python3.5/site-packages/pymunk/libchipmunk.so] 
    Traceback (most recent call last): 
     File "/home/wm/.virtualenvs/cv/lib/python3.5/site-packages/cffi-1.11.0-py3.5-linux-x86_64.egg/cffi/api.py", line 167, in _typeof 
     result = self._parsed_types[cdecl] 
    KeyError: 'typedef void (*cpSpaceDebugDrawCircleImpl)(cpVect pos, cpFloat angle, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data)' 

    During handling of the above exception, another exception occurred: 

    Traceback (most recent call last): 
     File "/home/wm/.virtualenvs/cv/lib/python3.5/site-packages/cffi-1.11.0-py3.5-linux-x86_64.egg/cffi/cparser.py", line 276, in _parse 
     ast = _get_parser().parse(fullcsource) 
     File "/home/wm/.virtualenvs/cv/lib/python3.5/site-packages/pycparser/c_parser.py", line 152, in parse 
     debug=debuglevel) 
     File "/home/wm/.virtualenvs/cv/lib/python3.5/site-packages/pycparser/ply/yacc.py", line 331, in parse 
     return self.parseopt_notrack(input, lexer, debug, tracking, tokenfunc) 
     File "/home/wm/.virtualenvs/cv/lib/python3.5/site-packages/pycparser/ply/yacc.py", line 1199, in parseopt_notrack 
     tok = call_errorfunc(self.errorfunc, errtoken, self) 
     File "/home/wm/.virtualenvs/cv/lib/python3.5/site-packages/pycparser/ply/yacc.py", line 193, in call_errorfunc 
     r = errorfunc(token) 
     File "/home/wm/.virtualenvs/cv/lib/python3.5/site-packages/pycparser/c_parser.py", line 1761, in p_error 
     column=self.clex.find_tok_column(p))) 
     File "/home/wm/.virtualenvs/cv/lib/python3.5/site-packages/pycparser/plyparser.py", line 66, in _parse_error 
     raise ParseError("%s: %s" % (coord, msg)) 
    pycparser.plyparser.ParseError: <cdef source string>:2:16: before: cpSpaceDebugDrawCircleImpl 

    During handling of the above exception, another exception occurred: 

    Traceback (most recent call last): 
     File "pmtest2.py", line 5, in <module> 
     options = pymunk.pyglet_util.DrawOptions() 
     File "/home/wm/.virtualenvs/cv/lib/python3.5/site-packages/pymunk/pyglet_util.py", line 89, in __init__ 
     super(DrawOptions, self).__init__() 
     File "/home/wm/.virtualenvs/cv/lib/python3.5/site-packages/pymunk/space_debug_draw_options.py", line 51, in __init__ 
     @ffi.callback("typedef void (*cpSpaceDebugDrawCircleImpl)" 
     File "/home/wm/.virtualenvs/cv/lib/python3.5/site-packages/cffi-1.11.0-py3.5-linux-x86_64.egg/cffi/api.py", line 375, in callback 
     cdecl = self._typeof(cdecl, consider_function_as_funcptr=True) 
     File "/home/wm/.virtualenvs/cv/lib/python3.5/site-packages/cffi-1.11.0-py3.5-linux-x86_64.egg/cffi/api.py", line 170, in _typeof 
     result = self._typeof_locked(cdecl) 
     File "/home/wm/.virtualenvs/cv/lib/python3.5/site-packages/cffi-1.11.0-py3.5-linux-x86_64.egg/cffi/api.py", line 155, in _typeof_locked 
     type = self._parser.parse_type(cdecl) 
     File "/home/wm/.virtualenvs/cv/lib/python3.5/site-packages/cffi-1.11.0-py3.5-linux-x86_64.egg/cffi/cparser.py", line 476, in parse_type 
     return self.parse_type_and_quals(cdecl)[0] 
     File "/home/wm/.virtualenvs/cv/lib/python3.5/site-packages/cffi-1.11.0-py3.5-linux-x86_64.egg/cffi/cparser.py", line 479, in parse_type_and_quals 
     ast, macros = self._parse('void __dummy(\n%s\n);' % cdecl)[:2] 
     File "/home/wm/.virtualenvs/cv/lib/python3.5/site-packages/cffi-1.11.0-py3.5-linux-x86_64.egg/cffi/cparser.py", line 278, in _parse 
     self.convert_pycparser_error(e, csource) 
     File "/home/wm/.virtualenvs/cv/lib/python3.5/site-packages/cffi-1.11.0-py3.5-linux-x86_64.egg/cffi/cparser.py", line 307, in convert_pycparser_error 
     raise CDefError(msg) 
    cffi.error.CDefError: cannot parse "typedef void (*cpSpaceDebugDrawCircleImpl)(cpVect pos, cpFloat angle, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data)" 
    <cdef source string>:2:16: before: cpSpaceDebugDrawCircleImpl 

Que pensez-vous est à l'origine que? Est-ce la version python que j'utilise, ou peut-être que la compilation de cffi est défectueuse?

Répondre

3

Cette erreur se produit car il y avait une nouvelle version de pycparser (qui est utilisée par cffi), et cette version brise pymunk 5.3.0 et les versions antérieures. Hier, j'ai fait une nouvelle version de Pymunk, 5.3.1 avec une solution de contournement pour le problème. Si vous essayez de mettre à jour votre version de Pymunk vers 5.3.1 cela devrait fonctionner.