【问题标题】:Cython compiler errorsCython 编译器错误
【发布时间】:2012-07-31 03:50:13
【问题描述】:

我在一台较旧的计算机上,我正在尝试使用 Cython 来加速我编写的一些 python 代码,但是我无法让 Cython 使用即使是最简单的脚本。

这是我试图通过 Cython 运行的 python 代码,据我所知应该可以工作:

def hw():
    print "Hello World"

if __name__ == "__main__":
    hw()

这是我终端的输出:

C:\PyProjects\_cython>python hw.py
Hello World

C:\PyProjects\_cython>cython hw.py

C:\PyProjects\_cython>gcc hw.c
In file included from hw.c:4:
Python.h:8:22: error: pyconfig.h: No such file or directory
hw.c:457: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__Pyx_
PyInt_AsUnsignedLongLong'
hw.c:461: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__Pyx_
PyInt_AsLongLong'
hw.c:465: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__Pyx_
PyInt_AsSignedLongLong'
hw.c: In function '__Pyx_PyUnicode_Equals':
hw.c:826: error: 'Py_UNICODE' undeclared (first use in this function)
hw.c:826: error: (Each undeclared identifier is reported only once
hw.c:826: error: for each function it appears in.)
hw.c:826: error: expected ';' before 'ch1'
hw.c:827: error: expected ';' before 'ch2'
hw.c:828: error: 'ch1' undeclared (first use in this function)
hw.c:828: error: 'ch2' undeclared (first use in this function)
hw.c: At top level:
hw.c:1204: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__Pyx
_PyInt_AsUnsignedLongLong'
hw.c:1274: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__Pyx
_PyInt_AsLongLong'
hw.c:1344: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__Pyx
_PyInt_AsSignedLongLong'
hw.c: In function '__Pyx_InitStrings':
hw.c:1564: warning: assignment makes pointer from integer without a cast
hw.c: In function '__Pyx_PyInt_AsSize_t':
hw.c:1669: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'val'
hw.c:1669: error: 'val' undeclared (first use in this function)
hw.c:1670: error: expected ')' before 'LONG_LONG'
hw.c:1672: error: expected ')' before 'LONG_LONG'

我在 windows 7 64bit 上使用 32bit python 2.7

【问题讨论】:

  • 您的gcc 命令缺少包含目录和其他选项。
  • 使 Basile 的评论更加具体。确保 Python.h 可以作为 gcc 的包含来访问。
  • 好吧,我使用了“gcc hw.c -IC:\Python27\include”,结果如下:codepad.org/7uqvY7ui 仍然失败并抛出错误

标签: python c cython


【解决方案1】:

看看documentation。根据我的经验,最简单的方法是使用distutils,因为它知道传递给编译器所需的所有信息(例如头文件的位置、重要的库、用于创建合适共享对象的编译器选项等)并且,毕竟,写一个setup.py 文件并不是很困难。如果您不想安装该库,只需执行python setup.py build 并将共享对象复制到您想要的任何目录中(尽管您可能需要在build 目录中挖掘一点才能找到它)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多