因此,我正在开发一个Python程序包,并且这样做的方法是,在笔记本中测试功能,然后将其卸载到functions.py等中。
#include <iostream>
using namespace std;
struct A
{
std::string TEST;
};
class B
{
public:
A a;
void GetA(A& outA)
{
outA = a;
}
};
int main()
{
B* b = new B();
b->a.TEST = "ABC";
A refToA;
b->GetA(refToA);
refToA.TEST = "123";
cout << b->a.TEST;
return 0;
}
我的笔记本上有这个
/testpack/
__init.py__
functions.py
plotting.py
/notebooks/
plottingnotebook.ipynb
但是,当我添加新功能或对# Project package
module_path = os.path.abspath(os.path.join('../'))
if module_path not in sys.path:
sys.path.append(module_path)
import testpack as tp # Import project package
中的现有功能进行更改并在笔记本中重新导入时,这些功能将无法使用。
但是,当我在笔记本中重新启动内核时,此方法有效。
这是预期的行为吗?如果没有,如何确保不必重新启动内核就可以导入所做的更改?
答案 0 :(得分:2)
Python认为您已经导入了模块,因此跳过了它。您可以使用reload
中的内置importlib
函数强制python重新导入模块。请注意,如果尚未导入模块,reload
将引发NameError。这样的方案应该可以工作
try:
import importlib
importlib.reload(tp)
except NameError: # It hasn't been imported yet
import testpack as tp