最近在写自己的程序时,在通过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。
文章出处登录后可见!
已经登录?立即刷新