是否可以在 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”不是一个包。
我尝试 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
这在 __init__.py
在子模块目录下:from somelib.submodule.submodule_code import MyClass
__all__ = [MyClass]
现在您应该可以将其导入为 from somelib.submodule import MyClass
.
关于python - 在 Cython 中使用和导入/导入嵌套包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62245550/