如何将 python 脚本保存到本地目录并使用 import 语句调用它?

How to save a python script into a local directory and call it with an import statement?

我是创建模块的新手。我正在处理一个包含大量自定义函数的大型 Jupyter Lab (JL) 文件。我想获取这些函数,将它们保存在我的 JL 文件从中提取数据的同一工作目录中的 python 文件中,并将它们作为函数导入。我还不想将它们保存到 PIP 包管理器中;我现在只想将它们保存为本地包。

这些函数将在 .py 文件中,格式类似于:

def func1(x,y,z):
    """
    x = custom input
    y = custom imput
    z = custom input
    """
    
    do stuff


def func2(x,y,z):
    """
    x = custom input
    y = custom imput
    z = custom input
    """
    
    do stuff

def func3(x,y,z):
    """
    x = custom input
    y = custom imput
    z = custom input
    """
    
    do stuff

def func4(x,y,z):
    """
    x = custom input
    y = custom imput
    z = custom input
    """
    
    do stuff

我会将其保存在 python 文件中,例如“custom_func.py”,并将其保存在与我的 JL 文件相同的目录中。

保存 python 文件后,我需要做什么才能将其作为自定义本地包导入?我看到你需要用 __init__.py 做点什么,但我不确定那是什么。

After saving the python file, what do I need to do so that I can import this as a custom local package?

您无需执行任何其他操作。您可以将脚本“custom_func.py”中的函数引入您的命名空间,并将其引入 JupyterLab 笔记本中。
你试过了吗:

from custom_func import func1, func2, func3, func4

现在您可以在笔记本中使用这些功能中的每一个,就好像它们已经写在您的笔记本中一样。例如,result = func4(5,6,7).

或者,您可以引入整个 custom_func 脚本并通过引用导入文件的名称调用它,后跟一个点,然后是函数,例如 module_name.function_name:

import custom_func
my_result = custom_func.func1(1,2,3)

我只是将 here 之类的东西改编成你的例子。您可能需要查看 post,因为它可能会为您提供您喜欢的其他选项。同样的事情也适用于脚本,这就是 post 的意义所在。


您可能希望限制引入的内容的一个原因是,这样您就不会破坏命名空间中已有的内容。假设您已经定义了 func3。如果您通过我建议的第一种方法引入 func3,您可能会注意到正在发生并采取相应的行动。也许重命名您的其他功能。如果您这样做 from custom_func import *,您 可能不会注意到 您只是替换了 func3。如果按照我建议的第二种方式导入,新函数位于模块名称引用下,这样有助于消除两个 func3。因为一个是 func3,一个是 custom_func.func3。但是,通常我建议的第一个选项更可取,这样您就可以保持命名空间尽可能干净。