Dav*_*eon 12 python pip python-3.x jupyter-notebook
我作为开发人员正在开发一个 python 包。该包存储在 git repo 中,我使用本地分支来调试/修复该包的功能。
为了测试我对代码所做的更正,我在编辑模式下使用 pip 使用 Jupyter 笔记本,以便将我的本地分支作为包加载,然后我测试我修改的功能。
我运行的步骤如下:
像这样例如:
! pip install -e Path/To/Local/Package/ # step 1
import local_foo as foo # step 2
foo.print() # step 3
Run Code Online (Sandbox Code Playgroud)
在第 3 步之后,如果代码没有按预期运行,我会更正我的包,重新启动 jupyter 内核并重新运行前面的 3 个步骤,直到获得我想要的行为。
我的问题是:
有没有办法避免重新启动内核?
我尝试了以下但在这种情况下不起作用:
IPython autoreload:
%load_ext autoreload
%autoreload 2
Run Code Online (Sandbox Code Playgroud)
和importlib.reload:
import importlib
importlib.reload(foo)
Run Code Online (Sandbox Code Playgroud)
我尝试的解决方案来自这篇文章:https :
//support.enthought.com/hc/en-us/articles/204469240-Jupyter-IPython-After-editing-a-module-changes-are-not-effective-without-内核重启
非常感谢!
PS:另外,如果你们中的一些人可以分享使用 Jupyter notebooks 管理 python 包开发的技巧、工作流程或经验(测试,...)
您可能必须处理引用问题,因为非纯 Python 的包可能无法轻松地使用importlib.reload.
这可以通过在重新加载之前将其从模块和命名空间中删除来解决。
import foo # The first import of the package
import sys
import importlib
# Do things with foo
del sys.modules['foo'] # Remove it from the currently loaded modules
del foo # Remove it's name
importlib.reload(foo)
Run Code Online (Sandbox Code Playgroud)
约瑟夫·加文(Joseph Garvin)在这个答案中写了一个非常好的函数,它的操作类似并且也支持表单的导入from foo import bar。
| 归档时间: |
|
| 查看次数: |
636 次 |
| 最近记录: |