Python 如何重新加载用c++;使用pybind11的源代码

Python 如何重新加载用c++;使用pybind11的源代码,python,c++,pybind11,Python,C++,Pybind11,我使用的是pybind11文档中的第一步示例 #include <pybind11/pybind11.h> int add(int i, int j) { return i + j; } PYBIND11_MODULE(example, m) { m.doc() = "pybind11 example plugin"; // optional module docstring m.def("add", &add,

我使用的是pybind11文档中的第一步示例

#include <pybind11/pybind11.h>
int add(int i, int j)
{
    return i + j;
}
PYBIND11_MODULE(example, m)
{
    m.doc() = "pybind11 example plugin"; // optional module docstring
    m.def("add", &add, "A function which adds two numbers");
}
现在我做了一个简单的更改,在add()的输入中使用float而不是int,一切都会编译。我想重新加载模块示例,以便测试新的基于浮点的add()。但是,我无法找到重新加载示例模块的方法
importlib.reload
不起作用,
IPython
中的
%autorelaod 2
也不起作用。 这两种都是用纯Python模块进行测试的,而不是基于C++和pybDun11的模块。 我错过什么了吗?还是应该是这样

更新:这似乎是与

Python的导入机制永远不会关闭共享库。一旦 加载后,库将一直保留,直到进程终止

pybind11模块和ctypes模块在如何加载/导入模块方面似乎具有相同的特性。 另引自:

Python加载C扩展的方式不允许使用它们 重新加载(在与Python模块的契约中,Python代码可以 只需重新加载,不引用动态加载的库)


我现在只是想知道是否有一种方法可以更方便地重新加载模块。例如,为一个新的python shell生成一个子进程,该进程复制所有与C扩展相关的变量/模块,并替换原来的变量/模块。

重新加载模块是什么意思?如果您只是替换pybind11生成的模块并重新运行python脚本,它将使用新的模块。python有一个reload()函数,以前是内置的,现在在importlib中。它可以用于在python进程运行时再次重新加载先前导入的模块,而在此期间,这些模块的代码已经更改。有时有效,有时无效。通常需要或阻碍它的是,需要重新创建使用库中某些类的对象,只是重新加载模块不会更改现有对象。@super我的意思是在不退出python shell的情况下重新加载,而不是以独立方式运行脚本这是半年前发布的。你找到解决这个问题的办法了吗?importlib.reload不适用于pybind模块。回答:“为什么不重新运行整个Python脚本?”如果有10分钟启动时间(例如从磁盘加载80GB和预处理),我不想每次在C++代码中更改逗号。在开发和调试时,能够快速地重新加载pybind模块是至关重要的。@James还没有解决方案。。。
import  example
example.add(2, 3) #returns 5