每次添加新功能时都必须重新加载内核吗?

时间:2019-04-24 20:10:03

标签: python python-packaging

因此,我正在开发一个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 中的现有功能进行更改并在笔记本中重新导入时,这些功能将无法使用。

但是,当我在笔记本中重新启动内核时,此方法有效。

这是预期的行为吗?如果没有,如何确保不必重新启动内核就可以导入所做的更改?

1 个答案:

答案 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