我有一个项目突然停止正常运行。我不知道为什么,因为我事先没有对其进行任何更改。
构建它时出现以下错误:
Traceback (most recent call last):
File ".\engine.py", line 7, in <module>
from controllers.game_panel_controller import GamePanelController
File "D:\Documents - HDD\Code\Allies_RL_Prototype\controllers\game_panel_controller.py", line 3, in <module>
import model.game as game
File "D:\Documents - HDD\Code\Allies_RL_Prototype\model\game.py", line 1, in <module>
from model.floor import Floor
File "D:\Documents - HDD\Code\Allies_RL_Prototype\model\floor.py", line 5, in <module>
from model.components.player_component import PlayerComponent
File "D:\Documents - HDD\Code\Allies_RL_Prototype\model\components\player_component.py", line 1, in <module>
import model.game as game
AttributeError: module 'model' has no attribute 'game'
此处阅读的所有内容均为import语句,无其他内容。
此处的文件夹结构:
.
├──engine.py
├──controllers
| └──game_panel_controller.py
└──model
├──game.py
├──floor.py
└──components
└──player_component.py
奇怪的是,有问题的陈述是
import model.game as game
当它上面只有几条语句时,它将成功运行该行。这不是一个无效的模块或不存在的文件。它出什么问题了?为什么突然停止正常运行?
这是在Windows 10,Python 3.5.4rc1上发生的,使用Windows powershell执行如下程序:
python .\engine.py
答案 0 :(得分:0)
我认为问题在于game_panel_controller.py试图在其直接路径之外进行导入。我认为此时PATH的范围包括立即目录和库目录,而不是执行脚本的目录。
因此,即使engine.py可以导入model.game,controllers.game_panel_controller也不能(因为它不在game_panel_controller脚本的直接目录中)。
你可以
from .. import model.game
或者您也可以使用符号链接或代码的重构(或者您可以在导入之前研究修改路径)。
答案 1 :(得分:0)
我不知道确切原因,但是我之前遇到过这个问题。
你可以试试看
export PYTHONPATH=.
答案 2 :(得分:0)
我认为您有循环进口的情况。
engine.py
导入controllers.game_panel_controller
,后者又导入model.game
,后者又导入model.floor
,又又导入了model.game
。
您说您没有做任何更改,因此它也不应该在之前生效。我无法解释。您确定没有任何改变?
答案 3 :(得分:0)
我想出了解决办法,但我仅部分理解为什么会发生这种情况。
我意识到一个月前我已经将python版本从3.7.1更改为3.5.4rc1,这不能正常运行。将Windows环境变量改回指向正确的文件夹可以解决此问题,并且可以正确构建。
所以我想在3.5.4rc1中无法完成我的工作,但在3.7.1中是可能的。
现在,特别是进行了哪些更改,使得以前不可能的现在变为可能仍然是一个谜。