在Cython中使用和导入/导入嵌套包

2024-09-29 00:21:11 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以在Cython扩展中使用嵌套包(又名子目录),如果可以,我应该如何做

Cython似乎不允许顶级包之外的相对导入/cimport。假设我有以下Cython项目结构:

/lib_interface.pyx
/lib_interface.pxd // the top level source files
/submodule/__init__.pxd
/submodule/submodule_code.pyx
/submodule/submodule_code.pxd

让我们假设我们得到的Cython库被称为SomeLib,因此在Python中,我希望这样做: 从SomeLib.submodule导入SomeClass

但这会导致错误,即“SomeLib.submodule”不是一个包

我试着将子模块导入lib_interface.pxd,但没有效果


Tags: the项目libtopcode结构顶级又名
1条回答
网友
1楼 · 发布于 2024-09-29 00:21:11

如果您想将内容导入到另一个Cython模块中,则需要在每个目录中使用__init__.pxd。如果还想将其导入Python,请在每个级别添加通常的__init__.py。因此,您的目录结构如下所示:

/lib_interface.pyx
/lib_interface.pxd
/__init__.py
/submodule/__init__.pxd
/submodule/submodule_code.pyx
/submodule/submodule_code.pxd
/submodule/__init__.py

这在子模块目录下的__init__.py中:

from somelib.submodule.submodule_code import MyClass

__all__ = [MyClass]

现在您应该可以将其作为from somelib.submodule import MyClass导入

相关问题 更多 >