Python导入模块报错:ModuleNotFoundError: No module named XX或ImportError: attempted relative import withXX

笔者在使用python写程序时,相对路径方式导入模块报错,其中,笔者要运行的py文件的子目录和文件夹spotAndGrid在同一个根目录下:

from ..spotAndGrid.show_image_qlabel import ZoomWindow

ImportError: attempted relative import with no known parent package

之后改为在终端使用-m命令运行脚本,继续报错:

ModuleNotFoundError: No module named 'slotfunction'

找了很多解决方案都说要在子文件下增加__init__.py文件才能够被编译器识别为package,增加了该文件以后依然报错,最后的解决方式是在要运行的py文件中增加如下代码,此法虽笨但却通用

import sys
import os

# 获取当前脚本所在目录
current_dir = os.path.dirname(os.path.abspath(__file__))
# 获取项目的根目录
project_root = os.path.dirname(current_dir)
# 将项目根目录添加到 sys.path
sys.path.append(project_root)

# 导入模块
from spotAndGrid.show_image_qlabel import ZoomWindow

保存,运行,报错消失。

-----------------------------------------------------分割线-------------------------------------------------------------------

后续,发现有的模块使用了上面的语句依然报错找不到module,排查以后发现这个问题的根源就是编译器无法把要导入的py文件识别为模块,造成这个问题的原因是笔者在开发过程中为了按功能分类py文件,挪动了这些文件的位置到新建的子文件夹,最终的解决方法是在python新建一个工程,然后把要实现同一个功能的py文件都复制粘贴到这个工程下, 重新运行一下,这样编译器就可以识别这些py文件了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值