Python中导入模块中的函数运行出错

Python中将deeplabv3+训练过程当做一个模块被调用时出错
deeplabv3+训练模块单独运行时不报错,被另一个文件调用时报错

train. py的内容:

import os
import datetime
import torch
省略掉一些导入的代码
def TrainDeeplabV3Plus():
  省略
if __name__=="__main__":
    TrainDeeplabV3Plus()

test. py的内容:

import train
train.TrainDeeplabV3Plus()
执行train.py是没问题的可以正常运行:

img

执行test. py报错而且很怪:

img

像是没跑完又重新从头开始加载了一样

应该不是import的问题,毕竟test.py中的内容也会运行,只不过是运行结果不对
等智慧的人解答,要更详细的内容可以call我,悬赏!

该回答引用ChatGPT
这个错误可能是由于train.py文件里的代码有一些前提条件(如文件路径)是以当前工作目录作为基准的,但是在test.py中调用train.py时工作目录不同,导致路径不正确。可以通过在train.py的代码里使用绝对路径来解决。
train.py


import os
import sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
import train
train.TrainDeeplabV3Plus()

test.py

import os
import sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
import train
train.TrainDeeplabV3Plus()

这可能是一个循环导入问题,train.py中导入了test.py中的模块,而test.py中也将train.py作为模块导入,这就形成了一个死循环。换句话说,每当文件都尝试加载自己,这会导致出错。你可以尝试重新组织代码,例如避免使用import,改用两个文件之间的函数通信。

感觉像是代码“累赘”了,存在重复导入的嫌疑。

只能是导入模块的问题,你省略的未展示的代码里可能有路径,在train.py调用时路径是OK的,但在test调用时不对,导致运行失败,可以使用
import sys,用sys把调用的目录都加入路径,这样不管哪里都可以找到。
祝好运