找不到Python模块,因为导入语句位于其他文件以外



在以下结构中:

src:
    model:
        - boardmodel.py
        - tests.py
        exceptions:
            - exceptions.py
    - visual.py

我正在从终端运行visual.py。在我的 boardmodel.py 中,我有以下导入:

from exceptions.exceptions import ZeroError, OverlapError, ArgumentError, ProximityError

在运行visual.py时,此行会导致错误:

Traceback (most recent call last):
  File "visual.py", line 3, in <module>
    from model.boardModel import Board
  File "/Users/sahandzarrinkoub/Documents/Programming/pythonfun/BouncingBalls/balls/src/model/boardModel.py", line 5, in <module>
    from exceptions.exceptions import ZeroError, OverlapError, ArgumentError, ProximityError
ModuleNotFoundError: No module named 'exceptions'

解决此问题的正确方法是什么?我应该将boardmodel.py中的导入语句更改为from model.exceptions.exceptions import ZeroError....吗?那感觉不是一个可持续的解决方案,因为如果我想在其他情况下使用boardmodel.py怎么办?让我你的想法。

编辑:

我将结构更改为:

src:
    model:
        - __init__.py
        - boardmodel.py
        - tests.py
        exceptions:
            - __init__.py
            - exceptions.py
    - visual.py

,但我仍然遇到相同的错误。

在每个子目录中放置一个名为 __init__.py的空文件,以使其成为包装。

查看什么是__init__.py?有关更多详细信息

然后,在boardmodel.py中,您需要使用相对导入

from .exceptions.exceptions import ...

或绝对的(来自pythonpath的根)

from model.exceptions.exceptions import ...

当您从命令行执行脚本时,包含脚本的目录会自动添加到您的PYTHONPATH中,并成为import语句的根源

您不在软件包的根源,因此您需要相对导入。

exceptions之前添加一个点:

from .exceptions.exceptions import ZeroError, OverlapError, ArgumentError, ProximityError

一个点均值"来自当前目录"…

最新更新