Cython的cimport和__init__.pyx存在缺陷吗?

8

似乎编译一个包含cimport语句的__init__.pyx存在缺陷。

这是我的文件夹结构:

DrawAPI\
    __init__.pyx
    utils.pxd

__init__.pyx 文件:

cimport utils

使用cython编译__init__.pyx时,出现了utils.pxd找不到的错误。但是将__init__.pyx重命名为其他名称(例如foo.pyx)就可以了。

DrawAPI\
    foo.pyx
    utils.pxd

然后编译 foo.pyx 完全没有问题。

我做错了什么吗?

1个回答

6
如果一个目录包含一个__init__.py__init__.pyx文件,则假定它是一个包目录。因此,在您的示例中,utils模块被认为属于DrawAPI包,并且其FQMN是DrawAPI.utils
然而,如果DrawAPI是您正在运行编译器的当前目录,并且您没有将DrawAPI添加到包含路径中,则utils.pxd将无法找到(如您所发现的)。
如果您打算让utils成为一个顶级模块,则必须将其移动到没有__init__.pyx文件的其他位置。
如果您打算将其放在一个包中,则cd进入包含DrawAPI的目录并从那里进行编译。

哈哈,当然。我还没有考虑到这个问题。不幸的是,相对导入目前还不支持,但是使用from DrawAPI cimport utils完全没问题。:) 奖励值50点和+1。 - Niklas R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接