繁体   English   中英

无法在同一 package 中导入 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 (说它是可运行的),那么import mod2将是正确的,并且上述替代方案会导致错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM