python导入同级自定义文件报错 No module named ‘distributed_utils‘

img

文件结构如图所示,报错原因在于启动train.py时,需要导入train_utils包内的train_and_eval.py文件,而train_and_eval.py文件需要导入同级目录下的distributed_utils自定义包,产生报错。

img

img

引用 皆我百晓生 小程序回复内容作答:
这个错误通常发生在Python中模块的导入路径出错或者没有安装相应的依赖包。如果你的自定义文件和要导入的文件夹位于同一级目录,你可以尝试以下几种方法来解决这个问题:

  1. 确保你的自定义文件的名称正确,包括大小写和文件后缀。
  2. 确保你正在运行的代码文件与自定义文件在同一目录下。
  3. 使用相对导入路径来导入自定义文件。例如,如果你的自定义文件名为distributed_utils.py,你可以在代码文件中使用from . import distributed_utils来导入它。
  4. 将自定义文件所在的目录添加到Python的模块搜索路径中。你可以在代码文件的开头添加以下代码来实现:
    import sys
    sys.path.append("/path/to/directory")
    
    其中/path/to/directory是自定义文件所在的目录的路径。

如果以上方法没有解决问题,可能你需要确认你是否已经安装了distributed_utils所需的依赖包。你可以使用pip命令来安装它们。例如,在命令行中运行pip install dependency_package_name来安装缺少的依赖包。

如果你仍然遇到问题,请提供更多的代码和错误信息,这样我们才能更好地帮助你解决问题。

【以下回答由 GPT 生成】

问题分析: 导入自定义模块时,Python会从系统的sys.path中搜索对应的模块。如果模块不在sys.path中,Python将无法找到该模块导致报错。在这种情况下,我们可以通过以下步骤来解决问题:

解决方案: 1. 在train_and_eval.py文件的开头,添加以下代码,将当前目录(即train_utils目录)添加到sys.path中:

import sys
import os

# 获取当前文件所在目录的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 将上级目录添加到sys.path中
parent_dir = os.path.dirname(current_dir)
sys.path.append(parent_dir)
  1. 确保distributed_utils目录中的文件都有__init__.py文件,这个文件表示该目录是一个Python包。

  2. 在train_and_eval.py文件中,使用相对导入来引入distributed_utils包中的模块。例如:

from ..distributed_utils import some_module
  1. 在train.py文件中,导入train_and_eval.py文件时,使用相对导入。例如:
from train_utils import train_and_eval

通过以上步骤,应该可以成功导入distributed_utils包中的模块,解决报错问题。

注意事项: - 确保文件名和目录名的大小写与代码中的一致,因为在不同的操作系统上,对大小写的敏感度是不一样的。 - 确保文件结构和描述中一致,否则代码需要做相应调整。

如果以上解决方案没有解决问题,那么可能是其他原因导致的报错,请提供更多详细的错误信息,以便我们提供更准确的建议。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^