如何将Python代码混合到Python扩展modu中

2024-04-20 10:25:13 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个基于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代码?最好在相同的子模块内,但至少在相同的包内。非常感谢您的帮助!你知道吗


Tags: 模块代码frompyimportfoopurebar
1条回答
网友
1楼 · 发布于 2024-04-20 10:25:13

一个简单的方法是将C++模块构建到公共模块之外的受保护模块中,并将此受保护模块导入到公共模块中。你知道吗

例如,将mypackage.subA.foo更改为build to _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

相关问题 更多 >