Python同目录文件无法导入报错问题排查求助
两种导入写法的报错原因
from Domination import meleeWeapons报错
- 拼写错误:报错信息提示无法解析的包名为
Dominations,比实际文件夹名Domination多了末尾的s,首先需要修正拼写 - 路径不识别:直接运行
main.py时,Python的模块搜索路径默认不包含Domination文件夹的上级目录,无法将Domination识别为合法包
from . import meleeWeapons报错
- 相对导入仅支持在包内的模块文件中使用,直接将
main.py作为入口脚本运行时,该文件的身份是顶级脚本__main__,不属于任何包结构,相对导入规则失效,无法正确绑定导入的模块对象,调用对象时就会提示未定义。
解决方案
场景1:直接运行main.py作为项目入口(最常用)
直接使用同目录模块的无前缀导入即可:
- 导入整个模块:
import meleeWeapons,调用内部对象时使用meleeWeapons.myObject - 直接导入指定对象:
from meleeWeapons import myObject,调用时直接写myObject即可
如果还是提示找不到模块,可以在导入前手动将当前文件所在目录加入搜索路径:
import os import sys # 将当前main.py所在的目录加入模块搜索路径 sys.path.append(os.path.dirname(os.path.abspath(__file__))) # 之后再导入模块 import meleeWeapons
场景2:需要使用包结构导入(比如项目后续会对外作为包发布)
- 先在
Domination文件夹下新建一个空的__init__.py文件,标记该文件夹为Python可识别的包 - 不要直接运行
main.py,切换到Domination文件夹的上级目录,使用模块运行命令启动:python -m Domination.main - 此时
from Domination import meleeWeapons、from . import meleeWeapons两种写法都可以正常生效。
内容的提问来源于stack exchange,提问作者goose.mp4
相关产品推荐
相关产品推荐

