Python中的 __name__

Python中的 __name__

  • __name__ 是Python中每个模块(.py文件)都会自动拥有的一个内置变量。
  • 它表示当前模块的名字。

关键点:

  • 当你直接运行一个Python脚本,比如:
bash 复制代码
python train.py

此时,train.py文件里的 __name__ 的值是:

python 复制代码
__name__ == '__main__'
  • 但是当这个文件被 别的Python脚本导入 时,比如:
python 复制代码
import train

此时,train.py 文件里的 __name__ 就是模块名:

python 复制代码
__name__ == 'train'

为什么要写

python 复制代码
if __name__ == '__main__':
    # 只有在直接运行这个脚本时,才会执行这里的代码

这个判断是为了:

  • 保证只有直接运行这个脚本时,才执行if语句里的代码
  • 当这个脚本被别人导入时,if块里面的代码不会自动运行

在多进程/多线程里为什么重要?

Windows下的多进程启动机制,会重新导入当前启动脚本,如果没有这个判断,就会导致递归地反复运行整个脚本,导致错误。


总结

  • __name__ == '__main__' 这句话就是告诉Python:"如果你是直接执行这个文件,就运行下面的代码。"
  • 这也是Python程序的入口习惯写法。

你可以试试在train.py里加上:

python 复制代码
from ultralytics import YOLO

if __name__ == '__main__':
    model = YOLO('yolov8n.pt')
    model.train(data='weed.yaml', workers=1, epochs=5, imgsz=640, batch=16)

然后再运行,应该就不会报那个多进程错误了。需要我帮你写完整示例吗?