[英]How to mix Python code into a Python extension module
假设我有一个基于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.
现在,我想在一个子模块(例如subA
添加一些纯Python代码,以便我也可以
from mypackage.subA import pure_python_func
我已经对此类项目进行了MCVE评估,以期使其尽可能清晰。
如果我添加一个文件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到_mypackage._foo
。 然后,文件mypackage/subA/__init__.py
看起来像这样:
from _mypackage._foo import *
from mypackage.subA._pythonModule import *
# Any other python code could be imported here as well
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.