关键词:
【中文标题】当本地模块中的代码发生更改时,我是不是总是必须在 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.ipynbmisc.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文件,当单击该复... 查看详情