从父目录中另一个文件夹中的模块导入函数

Import a function from a module in another folder in parent directory

几个小时以来,我一直试图解决这个问题,但没有成功。 这是我的文件夹结构。

/parent_folder
      main.py
      module1/
        script1.py
      module2/
        script2.py

script2.py里面只有这个:

def subtract_numbers(x, y):
    return x - y

我希望script1.py能够调用这个函数。 我有:

from ..module2.script2 import subtract_numbers

result_subtraction = subtract_numbers(5, 5)
print(result_subtraction)

我得到ImportError: attempted relative import with no known parent package

我在 scrip1.py 的导入行中尝试了许多不同的排列,但我得到了同样的错误。我还必须注意,我在两个文件夹中有 __init__.py 个文件。

我该如何调用 script2.py 中的函数?

相对导入不能返回到比发起 python 调用的级别更高的级别。因此,您的问题是您直接从 module1 目录调用 script1.py。我猜是这样的:

user:/path/to/parent/module1$ python script1.py

因此您需要从可以实际看到 script2.py.

的级别拨打 script1.py

首先,将 script1.py 中的相对导入更改为绝对导入:

from module2.script2 import subtract_numbers

然后,移回 module1 的父目录 和 运行 模块作为脚本从那里(注意提示中的位置) :

user:/path/to/parent$ python -m module1.script1

这对我有用。

我把父目录(/parent_folder)的目录导出到PYTHONPATH.

export PYTHONPATH=$PYTHONPATH:/home/username/Desktop/parent_folder

然后,在文件 module1/script1.py 中,我更改了这一行:

from module2.script2 import subtract_numbers

现在我可以使用 python script1.py 调用脚本 script1.py,它调用在 module2/script2.py 中声明的函数,它会起作用。

我还必须注意,我到处都有 __init__.py 个文件(在父目录和两个子文件夹中),但我现在确定这是否重要。