D. *_*arn 5 python cython python-3.x
是否可以在 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
Run Code Online (Sandbox Code Playgroud)
让我们想象一下我们生成的 Cython 库被称为 SomeLib,所以在 Python 中我希望这样做: from SomeLib.submodule import SomeClass
但这会导致错误说“SomeLib.submodule”不是一个包。
我尝试 cimporting 并将子模块导入 lib_interface.pxd,但这从来没有帮助。
如果您想将内容导入到另一个 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
Run Code Online (Sandbox Code Playgroud)
这位于__init__.py子模块目录下:
from somelib.submodule.submodule_code import MyClass
__all__ = [MyClass]
Run Code Online (Sandbox Code Playgroud)
现在您应该能够将其导入为from somelib.submodule import MyClass.