Python ModuleNotFoundError:同目录模块导入失败的解决方案咨询
解决Python同目录模块导入报错的几种方法
问题背景
你的项目结构:
Project Folder ├── Main.py └── modules └── PowerSupply ├── PowerSupply.py └── SerialPort.py
运行Main.py时,PowerSupply.py里用from SerialPort import SerialPort会报ModuleNotFoundError,改成绝对路径能运行但不够合理,下面是几种更优的解决方式:
方法1:相对导入
在PowerSupply.py里用相对导入语法,因为两个文件在同一目录,直接写:
from .SerialPort import SerialPort
这里的.表示当前模块所在的目录,Python会优先从同目录查找模块,这种方式更符合包内模块的引用逻辑,也不用写冗长的绝对路径。
方法2:规范包结构
在PowerSupply文件夹里添加一个空的__init__.py文件(Python 3.3+虽可不加,但加上更符合包的规范),之后在PowerSupply.py里可以用两种写法:
# 写法一 from . import SerialPort # 写法二 from .SerialPort import SerialPort
这样Python会把PowerSupply识别为一个标准包,同目录下的模块就能正常互相引用。
方法3:临时调整模块搜索路径(不推荐)
如果只是临时应急,可以在PowerSupply.py开头添加代码,把当前文件所在目录加入Python的模块搜索路径:
import sys import os sys.path.append(os.path.dirname(os.path.abspath(__file__))) from SerialPort import SerialPort
但这种方式会污染全局模块搜索路径,容易引发命名冲突,非必要不建议使用。
内容的提问来源于stack exchange,提问作者Camon
相关产品推荐
相关产品推荐

