Python 中的相对导入

问题描述 投票:0回答:1

我有以下目录结构:

count/ 
    |__init__.py  
    |count_by_line.py
ultralytics/
    |__init__.py
    |some_module.py
command/
    |__init__.py
    |save_image.py

我想使用

from ultralytics import YOLOv10
行导入 YOLOv10,但它会抛出此错误:

Traceback (most recent call last):
  File "/home/aitraining/sun/application_alarm_ver_1/yolov10/count/count_by_line.py", line 7, in <module>
    from ultralytics import YOLOv10
ImportError: cannot import name 'YOLOv10' from 'ultralytics' (/home/aitraining/sun/application_alarm_ver_1/app_alarm/lib/python3.10/site-packages/ultralytics/__init__.py)`

from csv_command import csv_manage,save_image
也会抛出此错误:

Traceback (most recent call last):
  File "/home/aitraining/sun/application_alarm_ver_1/yolov10/count/count_by_line.py", line 10, in <module>
    from csv_command import csv_manage,save_image
ModuleNotFoundError: No module named 'csv_command'

这段代码也没有改变任何东西:

import sys
import os
sys.path.append(r"yolov10")
import YOLOv10
from ultralytics import YOLOv10
from csv_command import csv_manage,save_image

如何使这些导入正确工作?

python import path
1个回答
0
投票

当您尝试导入的模块在指定的位置不存在或者导入方式存在问题时,通常会出现错误 ImportError:无法导入名称“YOLOv10”。

解决方案:

确保 YOLOv10 实际上是在 ultralytics/some_module.py 或 ultralytics 包中的另一个模块中定义的。 在 ultralytics/init.py 文件中,如果在 some_module.py 中定义了 YOLOv10,则应确保正确导入它。 例如,如果在 some_module.py 中定义了 YOLOv10,则应将 init.py 修改为:

从.some_module导入YOLOv10

从 csv_command 导入时出错:

错误 ModuleNotFoundError: No module named 'csv_command' 表示 Python 找不到模块 csv_command。这可能是因为您的文件夹实际上名为 command,而不是 csv_command。

解决方案:

在导入语句中将模块名称更正为命令,如下所示: 蟒蛇:

从命令导入 save_image 或者,如果文件夹应为 csv_command,请将命令/目录重命名为 csv_command/。

  1. 调整sys.path: 当您使用这样的目录结构时,您可能需要调整 sys.path 以包含父目录,以便 Python 可以找到模块。

在脚本中,确保将父目录添加到 sys.path 中:

蟒蛇:

导入系统 导入操作系统

获取‘ultralytics’和‘command’所在的父目录

sys.path.append(os.path.dirname(os.path.abspath(file)) + "/..")

从 ultralytics 导入 YOLOv10 从命令导入 save_image 这将帮助Python找到ultralytics和命令模块。

count_by_line.py 的最终结构: Python 复制代码 导入系统 导入操作系统

将父目录添加到sys.path

sys.path.append(os.path.dirname(os.path.abspath(file)) + "/..")

from ultralytics import YOLOv10 # 确保它在 ultralytics 包中正确定义 from command import save_image # 确保您使用正确的模块名称

© www.soinside.com 2019 - 2024. All rights reserved.