我一直在为我的python应用程序使用Jupyter笔记本。我经常使用几种实用功能。今天,我的解决方案是将所有这些功能复制到新的python笔记本中并执行我的新应用程序。我想编写一个python文件(比如utility.py)并在该文件中编写所有例程函数。但是,我不知道如何调用或将utility.py导入Jupyter笔记本。
utility.py
def f1(): do_something
def f2: do_something2
def f3: do_somthing3
在.ipynb文件中
import utility.py
utility.f1()
utility.f2()
答案 0 :(得分:1)
假设utility.py
的绝对路径为/home/anhata/utils/utility.py
:
import sys
sys.path.append('/home/anhata/utils')
import utility
utility.f1()
但是要小心,utility
是潜在复制品的常用词。
很可能在python包库中可能有一个名为utility
的模块。在这种情况下,您的程序可能会将您的utility.py
与该文件混淆。我建议您将其重命名为特定内容,例如anhata_utils.py
。
答案 1 :(得分:0)
关于阿里·伊尔马兹(Ali Yilmaz)出色反应的一则说明。实用程序必须使用.py扩展名而不是jupyter笔记本扩展名保存
答案 2 :(得分:0)
我最喜欢的处理方式是在每个笔记本的顶部粘贴相同的代码块,这段代码足够聪明,可以确定它的位置以及是否需要将其添加到路径中。
import sys, os
if os.path.abspath("..") not in sys.path:
sys.path.insert(0, os.path.abspath(".."))
然后我可以使用包含我的笔记本的 notebooks/
子目录、包含任何必要数据的 data/
子目录以及包含 util/
和任何我想使用的额外代码。假设我在 __init__.py
中写了 my_function
,我会这样使用它:
util/utility.py
因为我将 from util.utility import my_function
y = my_function(x)
的完整路径放在 ".."
的第一行,所以我可以从那里导入。请注意名称冲突。例如,将您的子目录命名为 sys.path
,然后尝试导入公共 numpy
库会导致首先找到您自己的 numpy
版本,而您将永远无法访问公共版本.这些问题可能会让调试很恼火。