我有一个带有pybind11扩展模块的项目,其结构是分层的。
在导入时,我面临以下问题:
1.试验1
1.1。封装结构
org
├── __init__.py
├── sdk
│ ├── core.cpython-37m-x86_64-linux-gnu.so
│ └── __init__.py
└── sdk.cpython-37m-x86_64-linux-gnu.so1.2。从模块org.sdk导入类型:
python -c "from org.sdk import CommonType"1.2.1。错误失败:
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导入类型:
python -c "from org.sdk.core import A"1.3.1。成功
2.试验2
移除org/sdk/__init__.py
2.1。封装结构
org
├── __init__.py
├── sdk
│ └── core.cpython-37m-x86_64-linux-gnu.so
└── sdk.cpython-37m-x86_64-linux-gnu.so2.2。从模块org.sdk导入类型:
python -c "from org.sdk import CommonType"2.2.1。成功
2.3。从模块org.sdk.core导入类型:
python -c "from org.sdk.core import A"2.3.1.错误失败:
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?
发布于 2019-05-12 12:33:46
将python和C++混合在同一个包中的一个常见做法是将纯C++模块命名为带前导下划线的-C++模块,并在python模块中导入。
布局将如下所示:
org
├── __init__.py
└── sdk
├── __init__.py # import ._core as core
└── _core.cpython-37m-x86_64-linux-gnu.sohttps://stackoverflow.com/questions/55944354
复制相似问题