Cython编译错误"不是有效的模块名称"

时间:2017-02-08 00:40:09

标签: python compilation cython

我试图在Windows上编译一个Cython文件(.pyx),一个我刚从.py保存的文件。这是我的项目目录路径。

c:\..\Project\App\Analyzer\
_init_.py
Few_other_files.py
consolidated_loop_C.pyx
cl_setup.py

这是我的cl_setup.py

from Cython.Build import cythonize
try:
    from setuptools import setup
    from setuptools import Extension
except ImportError:
    from distutils.core import setup
    from distutils.extension import Extension


setup(
    name = "Consolidated Loop",
    ext_modules = cythonize("consolidated_loop_C.pyx")
)

我使用下面的语句来编译同一个文件夹。

python cl_setup.py build_ext --inplace

但我收到以下错误。我的猜测是我缺少cythonize()的某些参数,试图研究没有任何运气。

enter image description here

1 个答案:

答案 0 :(得分:4)

首先,将setup.py文件更改为仅使用distutils

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

setup(
    name = "Consolidated Loop",
    ext_modules = cythonize("consolidated_loop_C.pyx")
)

这是为了便于调试潜在的回复者。

然后,从一些实验和其他SO帖子Python building cython extension with setup creates subfolder when __init__.py existsThe command `python setup.py build_ext --inplace` always create a new directory

我建议您将cython文件移动到子目录中,或删除__init__.py文件。后一个问题很可能导致Python或Cython猜测当前目录模块的名称,因此是破折号问题。此外,setup.py文件不能存在于模块的目录中,这将导致麻烦。

如果您打算分发或打包您的代码,那么前一个选项(干净地移动具有自己的__init__.py的子目录中的文件等)是可取的。否则,只需删除__init__.py即可。这将使用build_ext --inplace创建一个本地可用的Python模块consolidated_loop_C.so