尝试编译扩展类型时出现编译错误

5
我正在尝试遵循这份关于使用pyx、pxd和cimport创建和使用扩展类型的教程
当在终端编译Cython文件时,我遇到了一个错误,但不知道如何纠正:在pyx文件中,cdef class CythonClass: 被指定为错误行。
File "/Library/Python/2.7/site-packages/Cython/Build/Dependencies.py", line 1056, in cythonize_one
    raise CompileError(None, pyx_file)
Cython.Compiler.Errors.CompileError: CythonClass.pyx

我正在使用Cython .25版本(并尝试了其他版本,每个版本都通过pip install cython安装)在MacOS Sierra上。Python的版本是2.7.10。

按照建议,我安装了gcc(Xcode 8.2命令行工具),但仍然收到错误信息。

文件内容:

pxd:

cdef class CythonClass:
    cdef:
        list list1
        dict d1, d2, d3, d4, d5, d6

pyx:

cdef class CythonClass:
    def __init__(self):
        self.list1 = []
        self.d1 = {}
        self.d2 = {}
        self.d3 = {}
        self.d4 = {}
        self.d5 = {}
        self.d6 = {}

setup.py(在终端通过python setup.py build_ext --inplace调用):

from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize(["CythonClass.pyx"]))

目前至少,我会尝试编译而不使用pxd文件,因为扩展类型的编译已经通过了。然而,导入扩展类型的主函数没有编译(出现错误:extTypeName不是类型标识符)。


2
嗨 - 我刚在我的电脑上尝试了这个,但实际上我在编译时没有遇到任何错误。我使用的是Windows 10,Python 3.5 64位版本,Cython版本为0.24.1。我不确定你的问题的原因。抱歉! - joon
1
你是如何安装Cython的?日志显示你正在使用系统Python并全局安装Cython,但这并没有说明具体步骤。Cython文档http://docs.cython.org/en/latest/src/quickstart/install.html建议安装Apple的XCode以获取gcc版本。 - Pierre de Buyl
1
嗨,我也测试了一下,没有发现错误。问题可能出在烦人的细节上,比如路径中的文件名或源代码中存在看不见的字符。你能否附上文件并提供完整的错误日志? - Pierre de Buyl
1
更详细地说,在Python中,模块名称中不允许出现连字符“-”。 - Pierre de Buyl
1
你可以这样做,这不是问题。主函数无论如何都必须从Python中调用。Cython只生成模块而不是可执行文件。在这种情况下,你的Python“驱动程序”可能只有几行代码。 - Pierre de Buyl
显示剩余6条评论
1个回答

0
我在这里找到了一个解决方案: 通过命令行进行Cythonize 请阅读该页面,特别是转到“使用cythonize命令编译”的部分。
您可以创建.pyd或.so文件:
cython yourmod.pyx
cythonize -a -i yourmod.c

对我有用。


为什么在命令行上调用Cythonize与使用setup.py有所不同。它将运行完全相同的命令。无论这个问题的提问者遇到了什么问题,当从命令行调用时都会是_完全相同的_. - DavidW
1
我不知道。有两种方法可以做到这一点。第一种对我不起作用,所以我尝试了选项2。选项2有效(!)。但自从最初发布这篇文章以来,我获得了一些额外的见解。 在使用Spyder时尝试导入相对或绝对路径时,似乎存在一个错误。当我使用Spyder和Cython导入时,会出现错误,但如果我通过命令行运行相同的代码,则可以正常工作。 我还没有看到关于这个问题的错误报告,我需要做一些工作来描述这个问题,然后才能提交错误报告。 - user3644627

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接