首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pymunk绘图工具不工作

Pymunk绘图工具不工作
EN

Stack Overflow用户
提问于 2017-07-16 00:31:11
回答 1查看 377关注 0票数 1

我正在努力在我的Ubuntu16.04上安装pymunk。我使用的是virtualenv,我安装了Python 3.5.2,pymunk 5.3.0和cffi 1.11.0。

我首先尝试了一个非常简单的代码;基本上,我创建了一个空的Space,并在它上面调用了step,一切都很顺利。然而,当我试图可视化它并创建DrawOptions实例时,我得到了奇怪的错误,我无法破译这些错误。另外,我尝试了matplotlib_utilpygame_util,但都无法创建DrawOptions

这是我使用的代码片段:

代码语言:javascript
复制
    import pymunk
    import pyglet
    import pymunk.pyglet_util

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

    s.debug_draw(options)

    # s.step(0.02)

这是我得到的输出:

代码语言:javascript
复制
    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编译有问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-16 17:01:34

出现此错误的原因是发布了新版本的pycparser (由cffi使用),该版本破坏了pymunk 5.3.0及更早的版本。昨天我发布了Pymunk的新版本,5.3.1,解决了这个问题。如果您尝试更新您的Pymunk版本到5.3.1,它应该可以工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45120438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档