Cython:试图包装SFML窗口;获取“ImportError:没有名为'ExprNodes'的模块”

时间:2013-05-22 21:52:29

标签: cython

sfml.pxd:

cdef extern from "SFML/Window.hpp" namespace "sf":

    cdef cppclass VideoMode:
        VideoMode(unsigned int, unsigned int) except +

    cdef cppclass Window:
        Window(VideoMode, String) except + 
        void display()

display.pyx:

cimport sfml

cdef class Window:

    cdef sfml.Window* _this

    def __cinit__(self, unsigned int width, unsigned int height):

        self._this = new sfml.Window(sfml.VideoMode(width, height), "title")

    def __dealloc__(self):

        del self._this

    def display(self):

        self._this.display()

setup.py:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

setup(
    cmdclass = {'build_ext': build_ext},
    ext_modules = [
        Extension("display", ["display.pyx"],
        language='c++',
        libraries=["sfml-system", "sfml-window"])
    ]
)

运行python setup.py build时的错误:

running build
running build_ext
cythoning display.pyx to display.cpp
Traceback (most recent call last):
  File "setup.py", line 10, in <module>
    libraries=["sfml-system", "sfml-window"])
  File "/usr/lib/python3.3/distutils/core.py", line 148, in setup
    dist.run_commands()
  File "/usr/lib/python3.3/distutils/dist.py", line 917, in run_commands
    self.run_command(cmd)
  File "/usr/lib/python3.3/distutils/dist.py", line 936, in run_command
    cmd_obj.run()
  File "/usr/lib/python3.3/distutils/command/build.py", line 126, in run
    self.run_command(cmd_name)
  File "/usr/lib/python3.3/distutils/cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "/usr/lib/python3.3/distutils/dist.py", line 936, in run_command
    cmd_obj.run()
  File "/usr/lib/python3.3/site-packages/Cython/Distutils/build_ext.py", line 163, in run
    _build_ext.build_ext.run(self)
  File "/usr/lib/python3.3/distutils/command/build_ext.py", line 354, in run
    self.build_extensions()
  File "/usr/lib/python3.3/site-packages/Cython/Distutils/build_ext.py", line 170, in build_extensions
    ext.sources = self.cython_sources(ext.sources, ext)
  File "/usr/lib/python3.3/site-packages/Cython/Distutils/build_ext.py", line 317, in cython_sources
    full_module_name=module_name)
  File "/usr/lib/python3.3/site-packages/Cython/Compiler/Main.py", line 608, in compile
    return compile_single(source, options, full_module_name)
  File "/usr/lib/python3.3/site-packages/Cython/Compiler/Main.py", line 549, in compile_single
    return run_pipeline(source, options, full_module_name)
  File "/usr/lib/python3.3/site-packages/Cython/Compiler/Main.py", line 386, in run_pipeline
    from . import Pipeline
  File "/usr/lib/python3.3/site-packages/Cython/Compiler/Pipeline.py", line 7, in <module>
    from .Visitor import CythonTransform
  File "Visitor.py", line 10, in init Cython.Compiler.Visitor (/build/src/Cython-0.19/Cython/Compiler/Visitor.c:15987)
ImportError: No module named 'ExprNodes'

显然,它找不到名为'ExprNodes'的东西,但我认为我的Cython安装没有被破坏,因为I managed to successfully wrap a different C++ library some time ago,我没有遇到这个问题。

我正在使用Cython 0.19。

我很感激您提供的任何帮助/见解。

感谢。

1 个答案:

答案 0 :(得分:1)

仔细观察回溯,我发现Cython在它自己​​编译的代码中失败了。它确实可能是一个错误,很抱歉第一次错过它。

你能做什么:

  • 创建一个干净的virtualenv,在那里安装Cython并检查它是否有效。 (版本0.19.1是最新的)。
  • 创建另一个virtualenv,但这次使用python setup.py install --no-cython-compile安装Cython。

如果其中任何一个失败,请将您的详细配置(Linux发行版和版本,python版本,gcc版本等)发布到cython-devel邮件列表。

顺便说一下BTW你原来成功的项目是否仍在编译?