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

PyR*_*der 1 python compilation cython

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

c:\..\Project\App\Analyzer\
_init_.py
Few_other_files.py
consolidated_loop_C.pyx
cl_setup.py
Run Code Online (Sandbox Code Playgroud)

这是我的 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")
)
Run Code Online (Sandbox Code Playgroud)

我正在使用以下语句在同一文件夹中进行编译。

python cl_setup.py build_ext --inplace
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

Pie*_*uyl 6

首先,将 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")
)
Run Code Online (Sandbox Code Playgroud)

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

然后,从一些实验和其他 SO 帖子Python building cython extension with setup 创建子文件夹,当 __init__.py 存在时命令 `python setup.py build_ext --inplace` 总是创建一个新目录

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

如果您打算分发或打包您的代码,前一个选项(将子目录中的文件干净利落地移动__init__.py,等等)更可取。否则,只需删除__init__.py并完成。这将创建build_ext --inplace一个本地可用的 Python 模块consolidated_loop_C.so