当本地模块中的代码发生更改时,我是不是总是必须在 Jupyter Lab 中重新启动内核?

     2023-02-23     76

关键词:

【中文标题】当本地模块中的代码发生更改时,我是不是总是必须在 Jupyter Lab 中重新启动内核?【英文标题】:Do I always have to restart my kernel in Jupyter Lab when code in a local module changes?当本地模块中的代码发生更改时,我是否总是必须在 Jupyter Lab 中重新启动内核? 【发布时间】:2021-06-23 22:29:26 【问题描述】:

当我使用 Jupyter Lab 编写笔记本时,我经常将代码放入本地文件夹,以便可以在其他笔记本中重复使用该代码。我通常通过执行以下操作来引用该本地模块。

import os
import sys

sys.path.insert(0, os.path.abspath('.'))

因此,如果我发现错误或需要增强代码并修改 *.py 文件,我无法通过简单地重新运行单元来加载新代码。我必须重新启动新内核才能获得新的更改。这个开发周期非常糟糕,尤其是当 notebook 的某些部分运行起来计算成本很高时。

是否有关于如何在 Juypter Lab 笔记本旁边更有效地编写和修改模块代码的任何提示?

我的代码结构如下所示。

温度/ ├── 库 │   ├── __init__.py │   ├── misc.py │   └── utils.py └── notebook.ipynb

misc.py 的代码如下。

def say_hi(name):
    print(f'hi name')

utils.py 的代码如下。

def say_bye(name):
    print(f'bye bye name')

在一个单元格中,然后我按如下方式导入一个函数。

from lib.utils import say_bye

say_bye('john')

现在假设我更改了say_bye(),我该如何重新加载模块?

【问题讨论】:

【参考方案1】:

如果我理解正确,您正在导入您的模块,并且您希望在进行修改后重新加载它们。这可以使用importlib.reload() 函数来完成:

import importlib
importlib.reload(my_module) 

模块my_module 必须先前已导入才能重新加载。

【讨论】:

我添加了有关我正在使用的设置的更多信息。命令究竟是什么?当我尝试importlib.reload(lib) 时,它会显示NameError: name 'lib' is not defined【参考方案2】:

在@bb1 的指导下,我能够让它工作。看来我必须使用以下代码在所有单元格(某处)上方或下方有一个悬空单元格。

import importlib
import sys

_ = importlib.reload(sys.modules['lib'])
_ = importlib.reload(sys.modules['lib.utils'])

如果我更改模块中的代码,我将不得不重新运行此单元格,新代码才会生效。

如果需要,您可以使用 sys.modules.keys() 检查加载的模块。

【讨论】:

【参考方案3】:

最好的方法是使用来自 IPython 的 autoreload 魔法:

In [1]: %load_ext autoreload

In [2]: %autoreload 2

In [3]: from foo import some_function

In [4]: some_function()
Out[4]: 42

In [5]: # open foo.py in an editor and change some_function to return 43

In [6]: some_function()
Out[6]: 43

Documentation.

【讨论】:

我非常喜欢这个内置功能。谢谢!

我们是不是必须在构建时为 phonegap 中的每个不同平台更改代码?

】我们是不是必须在构建时为phonegap中的每个不同平台更改代码?【英文标题】:Dowehavetochangethecodeatthebuildtimeforeachdifferentplatforminphonegap?我们是否必须在构建时为phonegap中的每个不同平台更改代码?【发布时间】:2015-02-1305:47:57... 查看详情

当 BindingList 中的现有项目发生更改时,Listbox 拒绝更新

】当BindingList中的现有项目发生更改时,Listbox拒绝更新【英文标题】:ListboxrefusestoupdatewhenchangesoccurinexistingitemsinaBindingList【发布时间】:2011-08-0616:32:41【问题描述】:一天中的大部分时间我都在发疯,试图让它发挥作用。我的... 查看详情

java示例代码_在安卓系统中,当数据库中的数据发生更改时收到通知

java示例代码_在安卓系统中,当数据库中的数据发生更改时收到通知 查看详情

UITextView 更改 selectRange 总是崩溃

...时间】:2016-09-2209:38:31【问题描述】:当用户单击textView中的段落时,我想将光标更改为linebreak,但是当我更改selectionRange时总是失败。我知道原因,但我必须更改func:textViewDidChangeSelection:(UITextV 查看详情

当表单中的任何文本框发生更改时运行函数?微软访问

】当表单中的任何文本框发生更改时运行函数?微软访问【英文标题】:Runafunctionwhenanytextboxchangesinaform?MSAccess【发布时间】:2014-08-0714:31:50【问题描述】:有没有办法在任何控制元素中的数据发生变化时在VBA中运行函数?我试... 查看详情

当 CMake 中的生成器或输入发生更改时,如何仅构建自动生成的代码?

】当CMake中的生成器或输入发生更改时,如何仅构建自动生成的代码?【英文标题】:HowtoonlybuildautogeneratedcodewhenthegeneratororinputchangesinCMake?【发布时间】:2014-11-2908:17:35【问题描述】:我正在开发一个源代码存储库,该存储库通... 查看详情

gitpull并解决冲突(代码片段)

...一个场景:我的同事进行更改并将更改推送给主人。我在本地更改我的主人。到目前为止,根据我的理解,此时我可以:拉我的同事工作的主人并解决我最终会遇到的合并冲突。创建我的本地备份,克隆主副本的新副本,然后将... 查看详情

当位置发生变化并且我的应用程序处于后台时,我可以获得本地通知吗?

...位置发生变化并且我的应用程序处于后台时,我可以获得本地通知吗?【英文标题】:CanIgetalocalnotificationwhenlocationchangesandmyappisinbackground?【发布时间】:2011-02-1710:45:04【问题描述】:我是iphone应用程序的新手,我想知道如何在... 查看详情

当对象 Hashcode 更改时,Hashmap 或 Hashset 中的查找会发生啥

】当对象Hashcode更改时,Hashmap或Hashset中的查找会发生啥【英文标题】:WhathappenstothelookupinaHashmaporHashsetwhentheobjectsHashcodechanges当对象Hashcode更改时,Hashmap或Hashset中的查找会发生什么【发布时间】:2012-10-2201:02:20【问题描述】:在... 查看详情

当特定文件夹中的文件发生更改时触发多分支管道

】当特定文件夹中的文件发生更改时触发多分支管道【英文标题】:Triggeramultibranchpipelinewhenthereisachangeinfilesinspecificfolder【发布时间】:2021-08-0319:48:09【问题描述】:当文件夹中的某些文件被推送到BitBucket时,我想运行多分支管... 查看详情

当 UIView 在窗口中的位置发生变化时是不是有通知?

】当UIView在窗口中的位置发生变化时是不是有通知?【英文标题】:IsthereanotificationforwhenaUIView\'spositioninthewindowchanges?当UIView在窗口中的位置发生变化时是否有通知?【发布时间】:2012-12-1201:40:08【问题描述】:我有一个自定义... 查看详情

当 CWD 发生变化时,如何在 Python 模块中使用相对路径?

】当CWD发生变化时,如何在Python模块中使用相对路径?【英文标题】:HowdoIusearelativepathinaPythonmodulewhentheCWDhaschanged?【发布时间】:2011-05-1009:27:18【问题描述】:我有一个Python模块,它使用模块目录的子目录中的一些资源。在搜... 查看详情

当项目中发生更改时,Xcode 如何编译文件?

...OS编程和Xcode的新手。请帮助我了解Xcode是如何编译和运行代码的。理想情况下,IDE知道程序中所做的更改,并且在我们下次编译或运行它时,它知道哪些文件需要再次编译。但是,当我尝试在一个项目中添加情 查看详情

charpter04开放-封闭原则

开放封闭原则简介开放-封闭原则,是说软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。这个原则其实是有两个特征,一个是说,“对于扩展是开放的(Openforextension)”,另一个是说“对于更改是封闭... 查看详情

当Android中Firebase数据库中的数据发生更改时将数据发送到应用程序[关闭]

】当Android中Firebase数据库中的数据发生更改时将数据发送到应用程序[关闭]【英文标题】:SenddatatoAppwhendatachangedinFirebaseDatabaseinAndroid[closed]【发布时间】:2019-12-2507:40:22【问题描述】:我正在构建一个应用程序,我希望在Firebase... 查看详情

从 SVN 更新时是不是可以始终(强制)覆盖本地更改?忽略冲突?

】从SVN更新时是不是可以始终(强制)覆盖本地更改?忽略冲突?【英文标题】:Isitpossibletoalways(force)overwritelocalchangeswhenupdatingfromSVN?Ignoreconflicts?从SVN更新时是否可以始终(强制)覆盖本地更改?忽略冲突?【发布时间】:2011-0... 查看详情

当 Swift 中表格中的特定内容发生更改时更改表格的标题

】当Swift中表格中的特定内容发生更改时更改表格的标题【英文标题】:ChangingthetitleofthetablewhenanspeseficthatchangesintableinSwift【发布时间】:2018-09-1400:13:49【问题描述】:我有一个表格视图,我用从数据库收到的数据填充它。我的... 查看详情

当对象中的字段发生更改时如何从 v-model 数组中删除对象

】当对象中的字段发生更改时如何从v-model数组中删除对象【英文标题】:Howtoremoveobjectfromv-modelarraywhenfieldintheobjecthaschanged【发布时间】:2020-05-2722:56:44【问题描述】:我已经设置了一个带有复选框输入的vue.js文件,当单击该复... 查看详情