Cython文件无法编译

问题描述:

我有一个运行得太慢的巨大Python代码。我不想用C重写我的整个代码,所以我做了一些研究,并且遇到了Cython。我被告知我的Python代码保存为.pyx并创建一个setup.py文件,将“cytonize”我的代码,然后将其编译成C.Cython文件无法编译

然而,当我键入C:/Users/loic/Documents/maido-cython/setup.py build_ext –inplace我得到一个错误:

Compiling C:/Users/loic/Documents/maido-cython/maido-cython.pyx because it changed. 
[1/1] Cythonizing C:/Users/loic/Documents/maido-cython/maido-cython.pyx 

Error compiling Cython file: 
------------------------------------------------------------ 
[unprintable code] 
------------------------------------------------------------ 

Documents\maido-cython\maido-cython.pyx:1:0: 'maido-cython' is not a valid module name 
Traceback (most recent call last): 
    File "C:\Users\loic\Documents\maido-cython\setup.py", line 9, in <module> 
    ext_modules = cythonize("C:/Users/loic/Documents/maido-cython/maido-cython.pyx"), 
    File "C:\Python27\lib\site-packages\Cython\Build\Dependencies.py", line 934, in cythonize 
    cythonize_one(*args) 
    File "C:\Python27\lib\site-packages\Cython\Build\Dependencies.py", line 1056, in cythonize_one 
    raise CompileError(None, pyx_file) 
Cython.Compiler.Errors.CompileError: C:/Users/loic/Documents/maido-cython/maido-cython.pyx 

下面的代码(maido-cython.py)和我用(不要担心,我上传它在我自己的谷歌账户)的4个numpy的文件(******_maido_856x512.npy):https://drive.google.com/drive/folders/0B7P95aWmH4DUek9xcEROb0FQR0E

以下是我在我的设置文件中写道: :

try: 
    from setuptools import setup 
except ImportError: 
    from distutils.core import setup 

from Cython.Build import cythonize 

setup(name = "graphique", 
     ext_modules = cythonize("C:/Users/loic/Documents/maido-cython/maido-cython.pyx"), 
    ) 

有人能告诉我我做错了吗?

编辑:

我把你的意见和更改的文件。我也改变了上传的链接:我还有一个问题https://drive.google.com/drive/folders/0B7P95aWmH4DUcFY0X3JycGlacDQ

当我输入C:/Users/loic/Documents/maido/setup.py build_ext –inplace具有与冒号做“:”

Compiling C:\Users\loic\Documents\maido\maido_cython.pyx because it changed. 
[1/1] Cythonizing C:\Users\loic\Documents\maido\maido_cython.pyx 

Error compiling Cython file: 
------------------------------------------------------------ 
... 


def metFeuForet(): 
    """ propage le feu a toute la foret pour N etape a l'aide de la fonction propageFeu """ 

    path = "C:\Users\loic\Documents\maido" 
      ^
------------------------------------------------------------ 

Documents\maido\maido_cython.pyx:258:14: Invalid unicode escape '\U' 

Traceback (most recent call last): 
    File "C:\Users\loic\Documents\maido\setup.py", line 9, in <module> 
    ext_modules = cythonize("C:\Users\loic\Documents\maido\maido_cython.pyx"), 
    File "C:\Python27\lib\site-packages\Cython\Build\Dependencies.py", line 934, in cythonize 
    cythonize_one(*args) 
    File "C:\Python27\lib\site-packages\Cython\Build\Dependencies.py", line 1056, in cythonize_one 
    raise CompileError(None, pyx_file) 
Cython.Compiler.Errors.CompileError: C:\Users\loic\Documents\maido\maido_cython.pyx 

我没有找到对应的Unicode字符。我应该添加什么?

+2

'maido-cython' =>'maido_cython'。文件名必须是有效的模块名称。 –

+1

另外,请勿使用相同的基本名称命名'.pyx'和'.py'文件。 –

+0

谢谢,我编辑了我的问题,因为我有另一个问题。 –

您可以完美执行一个.py*文件,其基数名称如a-b但您不能导入它。

import a-b 

无效,因为a-b不是有效蟒标识符(解释为“负B”)。您的cythonize过程也一样,并且消息足够清晰。

修复:将maido-cython.pyx重命名为有效的python名称,例如maido_cython.pyx

编辑:你的另一个问题,它的另一个经典的问题:

path = "C:\Users\loic\Documents\maido" 

\U被解释为Unicode转义。使用像这样的原始前缀:

path = r"C:\Users\loic\Documents\maido" 
+0

你能回答我编辑过的帖子吗?我有另一个问题。 –

+1

@LoïcPoncin完成(这是另一个无关的问题)。请不要进一步编辑您的问题。想想这个页面的未来读者。 –