【问题标题】:Using and importing/cimporting nested packages in Cython在 Cython 中使用和导入/导入嵌套包
【发布时间】:2020-06-07 12:48:00
【问题描述】:

是否可以在 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,但没有帮助。

【问题讨论】:

  • 尝试在你有 lib_interface 的地方添加一个空的__init__.pxd

标签: python python-3.x cython


【解决方案1】:

如果您想将内容导入另一个 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

【讨论】:

    猜你喜欢
    • 2011-01-12
    • 2018-02-21
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    相关资源
    最近更新 更多