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

标签 python python-3.x cython

是否可以在 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/

相关文章:

Python:ctypes加载的dll是否共享相同的内存空间

python - 如何在 blender 中标记最后导入的 *obj

python-3.x - 在 PyGtk3 中调整 Gtk.DrawingArea 的大小

python - 从一列复制字符串的一部分并将其放入新的 Pandas 列中

python - 哪个更快 np.vstack、np.append、np.concatenate 或在 cython 中制作的手动函数?

python - 复制 Tkinter Canvas 项目

python - Pandas 数据框两列的唯一值

python - 如何删除一个工作簿的多个Excel工作表中的重复列?

ubuntu - 为什么我收到错误消息 "Could not find a version that satisfies the requirement Cython"

python - Cython:从引用中获取时,Numpy 数组缺少两个第一个元素