将Python实用函数导入Jupyter Notebook

5

我一直在使用Jupyter笔记本来运行我的Python应用程序。我经常使用几个实用函数。今天,我的解决方案是将所有这些函数复制到新的Python笔记本中并执行我的新应用程序。我想编写一个Python文件(称为utility.py)并将所有例行程序函数写入该文件。但是,我不确定如何在Jupyter笔记本中调用或导入utility.py。

utility.py
def f1(): do_something
def f2: do_something2
def f3: do_somthing3

在.ipynb文件中
import utility.py
utility.f1()
utility.f2()
3个回答

3

假设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


当我调用anhata_utilities.print_test()函数时,我会收到以下错误#...module 'anhata_utilities' has no attribute 'print_test'...# - Anhata

1

我处理这个问题最喜欢的方法是将相同的代码块粘贴到每个笔记本的顶部,而且这段代码足够智能,可以找出它所在的位置以及是否需要添加到路径中。

import sys, os
if os.path.abspath("..") not in sys.path:
    sys.path.insert(0, os.path.abspath(".."))

然后我可以建立一个项目,其中包含一个名为notebooks/的子目录,其中包含我的笔记本电脑,一个名为data/的子目录,其中包含任何必要的数据,以及一个名为util/的目录,其中包含__init__.py和我想要使用的任何额外代码。假设我在util/utility.py中编写了my_function,我将按以下方式使用它:

from util.utility import my_function

y = my_function(x)

因为我将".."的完整路径放在了我的sys.path的第一行,所以我可以直接从那里导入。只要小心命名冲突。例如,将你的子目录命名为numpy,然后尝试导入公共的numpy库,会导致你自己的版本的numpy被首先找到,你永远无法访问公共版本。这些问题可能非常令人恼火。


0

关于Ali Yilmaz的出色回答,有一点需要注意。实用程序必须使用 .py 扩展名保存,而不是jupyter笔记本扩展名。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接