在以下结构中:
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
一个点均值"来自当前目录"…