同一目录下Python模块导入报错:Tower.py无法导入Entity.py求助
解决同一目录下模块导入失败的问题
问题原因
Python查找模块时会从sys.path列表中的路径依次检索。如果直接运行Tower.py(比如在folder目录执行python scripts/Tower.py),sys.path默认包含当前工作目录(即folder)而非scripts目录,因此找不到同目录下的Entity.py;若在scripts目录直接运行Tower.py,虽sys.path会包含scripts,但主脚本无法使用相对导入,仍会报错。
解决方案
方案1:使用相对导入(需从上层目录运行)
修改Tower.py的导入代码:
from . import Entity # 或直接导入类 from .Entity import Entity
回到folder目录,执行python -m scripts.Tower运行脚本(注意不要加.py后缀),Python会将scripts当作包处理,允许相对导入。
方案2:手动添加脚本目录到sys.path
在Tower.py最开头添加以下代码,把当前脚本所在的scripts目录加入模块搜索路径:
import sys import os # 获取当前脚本所在目录的绝对路径 script_dir = os.path.dirname(os.path.abspath(__file__)) # 将该目录加入sys.path sys.path.append(script_dir) # 现在可正常导入 import Entity
这种方式无论从哪个目录运行Tower.py,都能找到同目录下的Entity模块。
方案3:以Main.py作为入口运行
如果项目入口是Main.py,修改Tower.py的导入路径为基于顶层目录:
from scripts import Entity # 或 from scripts.Entity import Entity
在folder目录执行python Main.py,此时folder会被当作顶层模块目录,Python能正确检索到scripts下的所有模块。
内容的提问来源于stack exchange,提问作者serowi913
相关产品推荐
相关产品推荐

