Python Cython编译器错误

Python Cython编译器错误,python,compiler-errors,cython,Python,Compiler Errors,Cython,我还没有找到太多关于这方面的信息,但是当尝试用cython编译我的一个python脚本时,它给了我以下错误: Error compiling Cython file: ------------------------------------------------------------ ... import traceback #line:24 import bcrypt #line:25 Y =str (os .path .dirname (os .path .abspath (__file

我还没有找到太多关于这方面的信息,但是当尝试用cython编译我的一个python脚本时,它给了我以下错误:

Error compiling Cython file:
------------------------------------------------------------
...
import traceback #line:24
import bcrypt #line:25
Y =str (os .path .dirname (os .path .abspath (__file__ )))#line:28
IH =open #line:29
IA =str #line:30
IK =print #line:31
   ^
------------------------------------------------------------

headlessobfu.pyx:29:4: Expected an identifier or literal
Traceback (most recent call last):
  File "setup.py", line 5, in <module>
    ext_modules = cythonize("headlessobfu.pyx")
  File "C:\Users\justi\AppData\Local\Programs\Python\Python36-32\lib\site-packages\Cython\Build\Dependencies.py", line 1026, in cythonize
    cythonize_one(*args)
  File "C:\Users\justi\AppData\Local\Programs\Python\Python36-32\lib\site-packages\Cython\Build\Dependencies.py", line 1146, in cythonize_one
    raise CompileError(None, pyx_file)
Cython.Compiler.Errors.CompileError: headlessobfu.pyx

如果有人有解决办法,请告诉我。谢谢。

好的,这与cython和python格式有关。代码必须完全模糊,并且没有错误,否则编译器将无法工作。因此,请仔细检查编译器,并在出现错误时修复错误。希望这有帮助。

好的,这与cython和python格式有关。代码必须完全模糊,并且没有错误,否则编译器将无法工作。因此,请仔细检查编译器,并在出现错误时修复错误。希望这能有所帮助。

默认情况下,Cython采用Python 2语法,即使在使用Python 3时也是如此(编辑2021:Cython 3将改变这一点,默认情况下主要采用Python 3语法)。以下是您应该创建的最小完整示例:

cy_print_test.pyx

x = print

如果我用Cython编译它

cython cy_print_test.pyx
我收到了您所做的错误消息
print
不是标识符或文字,因为在Python2语法下,它是一个特殊语句

但是,如果我使用Cython将其编译为使用Python 3语法:

cython -3 cy_print_test.pyx
它工作得很好-在Python3语法下,print是一个函数,因此这非常有意义


获取Python3语法的其他方法是在.pyx文件的开头添加以下行

#cython: language_level=3
或者在
setup.py
中将其指定为编译器指令:

from distutils.core import setup
from Cython.Build import cythonize

setup(
    ext_modules = cythonize('cy_print_test.pyx', compiler_directives={'language_level': 3}),
)

(请注意,您的
setup.py
也应该是问题中最小的完整示例的一部分)

默认情况下,Cython采用Python2语法,即使您使用的是Python3(edit 2021:Cython 3将改变这一点,并且默认情况下主要采用Python3语法)。以下是您应该创建的最小完整示例:

cy_print_test.pyx

x = print

如果我用Cython编译它

cython cy_print_test.pyx
我收到了您所做的错误消息
print
不是标识符或文字,因为在Python2语法下,它是一个特殊语句

但是,如果我使用Cython将其编译为使用Python 3语法:

cython -3 cy_print_test.pyx
它工作得很好-在Python3语法下,print是一个函数,因此这非常有意义


获取Python3语法的其他方法是在.pyx文件的开头添加以下行

#cython: language_level=3
或者在
setup.py
中将其指定为编译器指令:

from distutils.core import setup
from Cython.Build import cythonize

setup(
    ext_modules = cythonize('cy_print_test.pyx', compiler_directives={'language_level': 3}),
)

(请注意,您的
setup.py
也应该是您问题中最小、完整的示例的一部分)

能否请您粘贴一个尽可能小但不可编译的Cython文件?这只是我无法编译的最小文件?好的,通过测试,我可以看到当编译器检测到“无效python”时会发生这种情况我将检查代码中是否存在格式错误这是Python 2/3的问题吗?Cython默认以Python 2的形式读取代码,我想这可能是Python 3.6中的代码。请您粘贴一个尽可能小的Cython文件,使其不可编译吗?只是我可以得到的最小文件,不可编译吗?好的,通过测试,我可以看到当编译器检测到“无效Python”时会发生这种情况我将检查代码中是否存在格式错误这是Python 2/3的问题吗?Cython默认以Python2的形式读取代码,我想这可能是Python3.6I中的代码,我通过消除代码模糊来修复它,但是这个答案也可以。这将是一个比我所做的要干净得多的解决方案。我通过消除代码的模糊来修复它,但这个答案同样有效。这将是一个比我所做的更干净的解决方案。