У меня следующая структура каталогов:
my-game/
__init__.py
logic/
__init__.py
game.py
player.py
game.py
и player.py
имеют зависимость импорта друг от друга (циклический импорт).
game.py
имеет следующее определение.
from logic.player import RandomPlayer, InteractivePlayer
T = 8
class Game:
def __init__(self, p1, p2)
...
# some other things
if __name__ == '__main__':
p1 = RandomPlayer()
p2 = InteractivePlayer()
g = Game(p1, p2)
...
player.py
выглядит следующим образом:
from logic.game import T
class Player:
def __init__(self):
...
class RandomPlayer(Player):
def __init__(self):
...
class InteractivePlayer(Player):
def __init__(self):
...
Я пытаюсь запустить игру из каталога logic/
, но получаю следующую ошибку.
$ python3 game.py
Traceback (most recent call last):
File "game.py", line 2, in <module>
from logic.player import RandomPlayer, InteractivePlayer
ModuleNotFoundError: No module named 'logic'
Затем я попытался запустить game.py
из каталога выше (my-game/
).
$ python3 logic/game.py
Traceback (most recent call last):
File "logic/game.py", line 2, in <module>
from logic.player import RandomPlayer, InteractivePlayer
ModuleNotFoundError: No module named 'logic'
Что я делаю не так? Как я могу заставить этот циклический импорт работать?
Я также пытался использовать этот импорт в player.py
from .game import T
и использование
from .player import RandomPlayer, InteractivePlayer
в game.py
.
В этом случае я получаю другую ошибку. Например, при запуске с my-game/
,
$ python3 logic/game.py
Traceback (most recent call last):
File "logic/game.py", line 2, in <module>
from .player import RandomPlayer, InteractivePlayer
ModuleNotFoundError: No module named '__main__.player'; '__main__' is not a package
Я получаю похожую ошибку при запуске из каталога logic/
.
Я посмотрел этот пост, но не понял, где я ошибался.