关于Python import导入自己模块的问题

最近在写自己的程序时,在通过import导入自己的模块时,出现了No moudle named ....(此处为导入的模块名),经过多番排查,也不是拼写错误,卡了我很久,最后考虑到是导入模块时的相对索引路径的问题。我当时的文件结构如下:

我运行的py文件为run.py,并且我在run.py里面从api.py import了模块没有报错:

from api import Api

通过api.py import了dataloader下的mydataset模块,也没有报错:

from dataloader.mydataset import GarbageClassfication

但是问题就出在了最后一步,我通过mydataset模块import了同级目录下的utils.py就报了上述所说的错误:

import utils

然后我单独运行了mydayaset.py文件,发现能够正常运行,但是就是运行run.py时在mydataset的import模块报错"No moudle named utils"。

最后我将mydataset.py中的import utils改为了:

from dataloader import utils

虽然在mydataset.py中该行代码中会被标红,但是通过run.py运行时却能正常运行。

还有一个办法可以使得run.py和mydataset.py不标红,如下(个人更推荐这种方式):

from dataloader.utils import *

最后,我个人认为出现以上问题的原因为:

因为我运行的文件run.py在整个code目录下,因此在次py文件中导入其他模块都是基于code的相对路径,而如果code目录下的文件调用了其子目录下的文件,并且子目录下的文件又调用了同级目录下的文件时,此时的相对路径还是基于最初执行的文件run.py所在的父目录(即code目录),因此程序在code目录下找不到utils文件导致报错。

将代码改为从dataloader目录下导入untils模块因此就不会再报错,因为基于的父目录为code。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值