假设我有一个基于Pybind11扩展的Python包mymodule
,在运行python setup.py install
之后,下面的代码就像一个符咒:
from mypackage.subA import foo # foo is written in C++.
from mypackage.subB import bar # Same for bar.
我现在想在其中一个子模块中添加一些纯Python代码,比如subA
,这样我也可以这样做
from mypackage.subA import pure_python_func
I've made an MCVE of such a project 希望尽可能清楚地说明这一点。你知道吗
如果我添加一个文件mypackage/subA.py
,在其中写入pure_python_func
(并添加一个空的mypackage/__init__.py
),我可以导入Python部分,但是扩展模块消失了。即
from mypackage.subA import pure_python_func # Works
from mypackage.subA import foo # Fails
from mypackage.subB import bar # Fails
我的问题是,如何在同一个包中同时包含扩展代码和Python代码?最好在相同的子模块内,但至少在相同的包内。非常感谢您的帮助!你知道吗
一个简单的方法是将C++模块构建到公共模块之外的受保护模块中,并将此受保护模块导入到公共模块中。你知道吗
例如,将
mypackage.subA.foo
更改为build to_mypackage._foo
。那么文件mypackage/subA/__init__.py
看起来像这样:相关问题 更多 >
编程相关推荐