【问题标题】:CompileError when attempting to compile extension type尝试编译扩展类型时出现 CompileError
【发布时间】:2017-06-15 01:17:46
【问题描述】:

我正在尝试关注tutorial 使用 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

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

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

文件内容:

像素:

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 is not a type identifier)。

【问题讨论】:

  • 嗨 - 我刚刚在我的机器上试过这个,但实际上我在编译时没有收到任何错误。我使用 Windows 10,Python 3.5 64 位,Cython 版本 0.24.1。我不确定您的问题的原因是什么。对不起!
  • 你是如何安装 Cython 的?该日志使您看起来像是在使用系统 Python 并在系统范围内安装 Cython,但这并没有说明如何。 Cython 文档docs.cython.org/en/latest/src/quickstart/install.html 建议安装 Apple 的 XCode 以获得 gcc 版本。
  • 您好,我也测试了,没有发现错误。问题可能在于烦人的细节,例如路径中的文件名或源代码中存在不可见字符。能否附上文件并提供完整的错误日志?
  • 更多细节:Python 中不允许在模块名中使用连字符 -
  • 只有在要将 cython 模块导入另一个 cython 模块时才需要 pxd 文件。但是你不会在CythonClass.pyx中导入CythonClass.pxd

标签: python compiler-errors compilation cython


【解决方案1】:

我在以下位置找到了解决方案: Cythonize by Command Line

阅读页面,但更具体地转到部分:“使用 cythonize 命令编译”。

您创建 .pyd 或 .so 文件:

cython yourmod.pyx
cythonize -a -i yourmod.c

为我工作。

【讨论】:

  • 为什么在命令行上调用 Cythonize 与使用 setup.py 有任何不同。它将运行完全相同的命令。当从命令行调用时,这个问题的提问者遇到的任何问题都会完全相同
  • 我不知道。有两种方法可以做到这一点。第一个对我不起作用,所以我尝试了选项 2。选项 2 有效(!)。但是自从最初发布此消息以来,我获得了一些额外的见解。使用 Spyder 尝试相对或绝对导入,似乎存在错误。使用 Spyder 和 Cython 导入时出现错误,但如果我通过命令行运行相同的代码,它可以工作。我还没有看到关于这个问题的错误报告,在我提交错误报告之前,我还有一些工作要做来描述这个问题。
猜你喜欢
  • 2011-07-23
  • 1970-01-01
  • 1970-01-01
  • 2015-10-22
  • 2018-07-12
  • 2019-08-31
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
相关资源
最近更新 更多