繁体   English   中英

如何将Python代码混入Python扩展模块

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM