2017-07-15 4 views
1

私はUbuntu 16.04でpymunkを設定するのに苦労しています。私はvirtualenvを使っています。Python 3.5.2、pymunk 5.3.0、cffi 1.11.0がインストールされています。Pymunk描画ユーティリティは動作しません

私は非常に単純なコードを最初に試しました。基本的には、私は空のSpaceを作成し、stepと呼ばれ、すべてが円滑に機能しました。しかし、私はそれを視覚化してDrawOptionsインスタンスを作成しようとすると、私は解読できない奇妙なエラーが発生します。また、matplotlib_utilpygame_utilを試しましたが、両方ともDrawOptionsの作成に失敗しました。

これは私が使用するコードスニペットは、次のとおりです。

import pymunk 
    import pyglet 
    import pymunk.pyglet_util 

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

    s.debug_draw(options) 

    # s.step(0.02) 

この出力は、私が取得さ:

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 

は、あなたはそれを引き起こしていると思いますか?それは私が使用しているPythonのバージョンですか、あるいは多分cffiのコンパイルに問題がありますか?

答えて

3

このエラーは、(cffiによって使用される)pycparserの新しいバージョンがリリースされ、そのバージョンがpymunk 5.3.0およびそれ以前のバージョンを破損したために発生します。昨日、私はPymunk 5.3.1の新しいリリースをこの問題の回避策で作成しました。 Pymunkのバージョンを5.3.1にアップデートしようとすると、動作するはずです。

関連する問題