绝对和相对导入 - 从子文件夹 1 导入子文件夹 2 中的模块

Absolute and Relative Imports - Importing module in subfolder2 from subfolder1

项目结构

我有以下项目结构:

pythonProject\
    modules\
        __init__.py
        module1\
            __init__.py
            script1.py
        module2\
            __init__.py
            script2.py

script2.py的内容是:

def script2_function():
  return "Import worked successfully"

绝对导入

尝试绝对导入时,script1.py的内容是:

from modules.module2.script2 import script2_function

print(script2_function())

当运行 script1.py(从项目根目录和module1目录)我得到以下错误:

ModuleNotFoundError: 没有名为 'modules'

的模块

相对导入

尝试绝对导入时,script1.py的内容是:

from ..module2.script2 import script2_function

print(script2_function())

当运行 script1.py(从项目根目录和module1目录)我得到以下错误:

ImportError: 试图在没有已知父包的情况下进行相对导入


老实说,我不明白我做错了什么,并尝试按照几个指南和堆栈答案进行操作,但没有任何方法可以解决这个问题。 你能解释一下如何解决它吗,这样我就可以更好地理解相对和绝对 python 导入?

提前感谢您提供的任何帮助。

如果我的理解正确,您可以将目录更改为 pythonProject 目录和 运行 python3 -m modules.module1.script1import 语句与您 运行 宁 Python 来自的位置有关。

当然,另一个选择是在项目根目录中添加 script1.py,这与上面的类似,对于许多项目来说可能更有意义。

对于以上两个,script1.py 中的导入语句可以是 from modules.module2.script2 import script2_functionfrom ..module2.script2 import script2_function

如果我误解了这个问题,我们深表歉意。