无法在同一个包中导入 Python 模块

Cannot import Python module in same package

我有一个 Python 3.9.2 项目,其目录结构如下:

lib/
├─ mod1.py
├─ mod2.py
├─ __init__.py
main.py

/main.py中,我有from lib import mod1。在 /lib/mod1.py 中,我有 import mod2。当我 运行 /main.py 时,我收到以下错误:

Traceback (most recent call last):
  File "/main.py", line 1, in <module>
    from lib import mod1
  File "/lib/init.py", line 1, in <module>
    import mod2
ModuleNotFoundError: No module named 'mod2'

为什么会这样?当我将 /lib/mod1.py 中的代码更改为 from lib import mod2 时,代码工作正常,但我不明白为什么会修复它。难道我不能像我最初尝试的那样导入 /lib/mod2.py 吗,因为 mod1.pymod2.py 都在同一个目录中?

/lib/mod1.py 中,您可能想做:

# relative import - entire module
from . import mod2

# relative import - specific piece
from .mod2 import foo 

# absolute import - entire module
from lib import mod2

# absolute import - specific piece
from lib.mod2 import foo

导入内容的正确方法在 Python 中非常棘手,因为它取决于您 运行 脚本的来源。

  • 如果您 运行 来自根目录的代码,import mod2 会导致问题,但是
  • 如果您要从 lib 内部 运行 /lib/mod1.py(假设它是 运行-able),那么 import mod2 将是正确的,并且上面的替代方案会导致错误。