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

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

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

我运行的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。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2022年4月6日 下午6:15
下一篇 2022年4月6日 下午6:22

相关推荐