首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何导入与带有子包和模块的纯python包同名的python扩展模块?

如何导入与带有子包和模块的纯python包同名的python扩展模块?
EN

Stack Overflow用户
提问于 2019-05-02 00:44:08
回答 1查看 576关注 0票数 2

我有一个带有pybind11扩展模块的项目,其结构是分层的。

在导入时,我面临以下问题:

1.试验1

1.1。封装结构

代码语言:javascript
复制
org
├── __init__.py
├── sdk
│   ├── core.cpython-37m-x86_64-linux-gnu.so
│   └── __init__.py
└── sdk.cpython-37m-x86_64-linux-gnu.so

1.2。从模块org.sdk导入类型:

代码语言:javascript
复制
python -c "from org.sdk import CommonType"

1.2.1。错误失败:

代码语言:javascript
复制
ImportError: cannot import name 'CommonType' from 'org.sdk' (python3.7/site-packages/org_sdk-0.0.0-py3.7-linux-x86_64.egg/org/sdk/__init__.py)

1.3。从模块org.sdk.core导入类型:

代码语言:javascript
复制
python -c "from org.sdk.core import A"

1.3.1。成功

2.试验2

移除org/sdk/__init__.py

2.1。封装结构

代码语言:javascript
复制
org
├── __init__.py
├── sdk
│   └── core.cpython-37m-x86_64-linux-gnu.so
└── sdk.cpython-37m-x86_64-linux-gnu.so

2.2。从模块org.sdk导入类型:

代码语言:javascript
复制
python -c "from org.sdk import CommonType"

2.2.1。成功

2.3。从模块org.sdk.core导入类型:

代码语言:javascript
复制
python -c "from org.sdk.core import A"

2.3.1.错误失败:

代码语言:javascript
复制
ModuleNotFoundError: No module named 'org.sdk.core'; 'org.sdk' is not a package

我想知道怎样才能找到两种进口产品都能使用的解决方案?

似乎默认的python加载器更倾向于使用org/sdk/__init__.py来加载org.sdk包,是否可以在org/sdk/__init__.py中添加一些代码来加载pybind11扩展模块org/sdk.cpython-37m-x86_64-linux-gnu.so

EN

回答 1

Stack Overflow用户

发布于 2019-05-12 12:33:46

将python和C++混合在同一个包中的一个常见做法是将纯C++模块命名为带前导下划线的-C++模块,并在python模块中导入。

布局将如下所示:

代码语言:javascript
复制
org
├── __init__.py
└── sdk
    ├── __init__.py # import ._core as core
    └── _core.cpython-37m-x86_64-linux-gnu.so
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55944354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档