Python中的 __name__
Python中的 __name__
__name__
是Python中每个模块(.py文件)都会自动拥有的一个内置变量。- 它表示当前模块的名字。
关键点:
- 当你直接运行一个Python脚本,比如:
python train.py
此时,train.py
文件里的 __name__
的值是:
__name__ == '__main__'
- 但是当这个文件被 别的Python脚本导入 时,比如:
import train
此时,train.py
文件里的 __name__
就是模块名:
__name__ == 'train'
为什么要写
if __name__ == '__main__':# 只有在直接运行这个脚本时,才会执行这里的代码
这个判断是为了:
- 保证只有直接运行这个脚本时,才执行if语句里的代码
- 当这个脚本被别人导入时,if块里面的代码不会自动运行
在多进程/多线程里为什么重要?
Windows下的多进程启动机制,会重新导入当前启动脚本,如果没有这个判断,就会导致递归地反复运行整个脚本,导致错误。
总结
__name__ == '__main__'
这句话就是告诉Python:“如果你是直接执行这个文件,就运行下面的代码。”- 这也是Python程序的入口习惯写法。
你可以试试在train.py里加上:
from ultralytics import YOLOif __name__ == '__main__':model = YOLO('yolov8n.pt')model.train(data='weed.yaml', workers=1, epochs=5, imgsz=640, batch=16)
然后再运行,应该就不会报那个多进程错误了。需要我帮你写完整示例吗?