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

本·Z

我有一个 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为 say 时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/mod1.py要从 inside运行(说它可以运行)lib,那么import mod2将是正确的,并且上述替代方案会导致错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章