Cython cimport和__init __.pyx越野车?

Nik*_*s R 8 import cython

似乎编译一个__init__.pyx包含cimport语句的bug是错误的.

这是我的文件夹结构:

DrawAPI\
    __init__.pyx
    utils.pxd
Run Code Online (Sandbox Code Playgroud)

__init__.pyx:

cimport utils
Run Code Online (Sandbox Code Playgroud)

编译__init__.pyxwith cython让我utils.pxd无法找到.但是重命名__init__.pyx为任何其他名称,foo.pyx例如

DrawAPI\
    foo.pyx
    utils.pxd
Run Code Online (Sandbox Code Playgroud)

然后编译foo.pyx工作就好了.

难道我做错了什么 ?

Fra*_*ser 6

如果目录包含__init__.py__init__.pyx文件,则假定它是包目录.因此在您的示例中,假设utils模块属于包DrawAPI,其FQMN是DrawAPI.utils

但是,如果DrawAPI您正在运行编译器的当前目录,并且您没有将DrawAPI添加到包含路径,utils.pxd则无法找到(正如您发现的那样......)

如果您打算将utils作为顶级模块,那么您将不得不将其移动到没有__init__.pyx文件的其他地方.

如果你打算将它驻留在一个包中,那么cd到包含DrawAPI并从那里编译的目录.