python 导入模块 - 我缺少什么?

python import module - what am I missing?

我试图为我自己的俄罗斯方块重组我的项目。 通过将其更改为不同的文件和不同的文件夹,我对模块导入感到困惑。

这是目录

Jstris
├── code_base
│   ├── constants.py
│   ├── functions.py
│   └── tetromino.py
│       
├── game_mode
│   ├── free_play.py
│   └── sprint.py
└── run.py

主要目标是执行 run.py 文件,它可以正常工作。需要明确的是,整个游戏都在运行。我进入菜单,可以开始我所有不同的游戏。但是我想了解这里发生了什么,但我自己搞不清楚。

在run.py中我导入了例如:(不是原​​始代码,只是为了演示)

from code_base.constants import SCREEN_HEIGHT, SCREEN_WIDTH
from code_base.functions import draw_window
from game_mode.free_play import main_free_play

在 functions.py 中,我导入以下内容:

from code_base.constants import PLAY_WIDTH, PLAY_HEIGHT
from code_base.tetromino import Tetromino

我需要在 functions.py 中使用上面的语法才能在执行 run.py 时不会出现错误。 但是如果我想执行 functions.py 我会得到一个错误“ModuleNotFoundError: No module named 'code_base'.

我是否必须接受它,因为我永远不会执行 functions.py,或者有没有办法让我的整个项目正常工作,但每个模块本身在执行时仍然能够正常工作? 或者更进一步,我构建文件和导入的方式是否只是迂回/而不是 Python 约定?我正在使用 python 3.8

这是因为相对路径,当你运行你的"run.py"文件时,它理解code_base.functions 因为它看到 2 个模块(code_basegame_mode),它们是您的文件夹名称在 Jstris 文件夹中,但是当您在 functions.py 中导入相同的名称时,它会查找 code_base 文件夹,但找不到一个,因此会引发错误 如果你想让你所有的模块自己运行,你可以尝试绝对路径,这在本期中有介绍:How to import a module given the full path?