无法在同一个包中导入 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.py
和 mod2.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
将是正确的,并且上面的替代方案会导致错误。
我有一个 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.py
和 mod2.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
将是正确的,并且上面的替代方案会导致错误。