当前位置: 首页 > 知识库问答 >
问题:

如何在Jupyter笔记本中使用外部Python文件中的代码?

封锐藻
2023-03-14

我有一个宠物项目,我是从一个Jupyter笔记本开始的。到目前为止,我把所有Python代码都放在了笔记本上。

一开始一切都很好。但随着时间的推移,我在笔记本上写的代码变得越来越复杂。现在它几乎无法管理:当我发现错误时,我需要

  1. 要导航到有错误的代码部分(通常在笔记本的开头),

我想把代码分成两部分:

  1. 一个将存储为Python文件的文件,我将使用编辑器(和/或IDE)对其进行编辑

让我们假设笔记本在我的本地机器上运行(视窗7;Jupyter在Anaconda中运行),Python文件也存储在本地。

使用IPython文件中的代码以便我可以频繁快速地修改此代码的好方法是什么?

我所说的“频繁且快速”是指“尽可能少的步骤将更改从Python文件传播到笔记本”。理想的解决方案是,我更改一个Python文件,运行一个命令,然后这些更改可以在Jupyter笔记本中使用。或者,使用一个更古老的类比,我希望它像PHP一样——您经常更改代码,并立即看到更改的结果。

更新1:我尝试在单元格中使用%load TestClass.py的解决方案

问题是,如果文件发生更改,单元格内容不会更新。

例子:

让我们假设我把文本

class TestClass:
    def __init__(self):
        print("TestClass constructor")

进入TestClass。py。然后,我在Jupyter笔记本中创建了一个单元格,其中包含%LoadTestClass。py。当我执行该单元格时,来自TestClass的代码将被删除。py被导入,行%加载TestClass。py被注释掉。

现在我将TestClass.py更改为

class TestClass:
    def __init__(self):
        print("TestClass constructor")
        print("change")

当我执行单元格时,它的内容没有改变。

共有3个答案

云隐水
2023-03-14

你在写:

行%load TestClass.py被注释掉。

我明白,你把它评论出来了。为什么?重新运行导入并更新类。

顺便提一下运行TestClass。py也应该这样做——至少在Jupyter NB。

刘浩思
2023-03-14

我一直在研究类似的问题。如果您使用Jupyterlab而不是旧的Jupyter笔记本,您可以同时打开多个nb,编辑保存函数的一个,然后在另一个中重新启动内核,以便在导入时进行更新。不幸的是,你失去了所有的变量,需要再次运行整个笔记本,但是它允许第一个nb中的变化推进到第二个nb中。

这不是一个完美的答案,但它让我能够继续从事我的项目。

仇承志
2023-03-14

听起来IPython的自动加载扩展正是您所需要的。简单的插头

%load_ext autoreload
%autoreload 2

Jupyter笔记本的第一个单元格中,导入的python模块会在更改时自动重新加载。您还可以对已安装的python包进行更改,前提是您已经安装了可编辑的python包。

 类似资料:
  • 问题内容: 典型地,一个运行或或在终端局部地启动一个Jupyter笔记本网络服务器(和打开的浏览器中的URL)。使用conda 和conda环境时, 最常见的错误消息似乎是:在conda环境中安装XYZ软件包后, 可以在其中启动的python控制台中运行,但是在 Jupyter笔记本中 运行相同的代码 将导致ImportError 。 这个问题已经被问过很多次了,但是没有一个很好的答案,大多数Q&

  • 当我运行这个代码时,我有一个警告。 !!! 警告如下!!! C:\Users#\Anaconda3\lib\site packages\sklearn\svm\base.py:193:futurearning: 如何避免这种警告?或者如何将gamma的值设置为缩放?

  • 我一直试图在Jupyter笔记本上显示gif,但遇到了一些麻烦。我一直得到一个空白的图像文件。 我已经尝试使用这个GitHub存储库中的html。 而且 以上这些到目前为止都没有奏效。 谢谢

  • 我在Windows 10上运行Anaconda,并使用Jupyter Notebook进行机器学习项目。 我最近开始意识到Conda中的虚拟环境。 我使用以下命令在conda中创建了一个虚拟环境 激活环境 ipykernel中安装的环境(不确定使用的术语是否正确) 现在环境是可见的jupyter笔记本,但当我启动它我得到

  • 我已经从Kaggle(视频游戏与评级)下载了一个数据库,但我不能用我的木星笔记本打开它。 我从这两行代码开始,但它给了我一个错误。。。 ()1中的UnicodeDecodeError回溯(最后一次调用)作为pd导入---- ~\Anaconda3\lib\site-包\熊猫\io\parsers.pyparser_f(filepath_or_buffer,sep,分隔符,标头,名称,index_c

  • 我回顾了各种相关问题,包括 如何让MathJax在ipython笔记本中启用mhchem扩展 但我不能让它工作。。。 我的测试用例很简单 期待直立的$\pi$,但目前只是'\uppi'回来了。 我已经尝试了以下使用细胞魔法 这会生成