python之 “__init__.py” 文件

提示:python之 “init.py” 文件


前言

提示:版本
Ubuntu 22.04
Python 3.10


提示:以下是本篇文章正文内容,下面案例可供参考

一、Python 中 __init__.py 文件的理解

示例:
在这里插入图片描述


1. What(是什么)

  • 定义
    __init__.py 是一个特殊文件,用于将普通目录标记为 Python 包(Package)。它在包被导入时自动执行

  • 作用

    • 标识包:Python 3.3 之前,目录必须包含 __init__.py 才能被视为包;之后版本中可省略,但显式使用仍是推荐做法
    • 初始化代码:可在其中编写初始化逻辑(如设置包级变量、预导入子模块)

2. Why(为什么需要)

  • 模块化需求
    随着项目规模增大,代码需要分组管理。通过 __init__.py 将相关模块组织到包中,便于维护和复用

  • 接口控制
    使用 __init__.py 定义包的公开接口(如 __all__),隐藏内部实现细节

  • 动态加载
    在复杂项目中,可通过 __init__.py 动态注册组件或配置环境

    扫描二维码关注公众号,回复: 17574210 查看本文章

3. Where(在哪里使用)

  • 位置
    __init__.py 必须位于包目录的根路径下。例如:
    在这里插入图片描述
  • 适用场景
  • 组织大型项目的模块结构。
  • 需要动态初始化或统一导出功能的场景

4. How(如何使用)

  1. 标识包
    创建 __init__.py 文件即可将目录标记为包。
    图为 tracker 包,包内可以包含多个python文件
    在这里插入图片描述
    2 导入
    from .shuttle_tracker import ShuttleTracker
    从当前目录下的 player_tracker.py 模块中导入 PlayerTracker
    使外部可以直接通过 tracker.PlayerTracker 访问
    在这里插入图片描述
    外部使用
    main.py 中使用 ShuttleTracker
    tracker 包 导入 ShuttleTracker 类使用
from tracker import  ShuttleTracker

在这里插入图片描述

二、问题

1. 当前py文件引入了其他包,如何直接运行?

目录结构:

# tree ./ -L 2 -d
./
|-- last_detect
|-- tracker
|   `-- __pycache__
|   |-- shuttle_tracker.py
|-- train
|   |-- player_output
|   `-- shuttle_output
`-- utils
    `-- __pycache__

shuttle_tracker.py 导入了 utils.video_utils 中的类
在这里插入图片描述
想直接运行 shuttle_tracker.py 方法

ModuleNotFoundError: No module named 'utils'

如图:
在这里插入图片描述
解决方法:

# export PYTHONPATH=/app/notebooks/yolov8-01/Badminton-Analysis
# echo $PYTHONPATH
/app/notebooks/yolov8-01/Badminton-Analysis
# python ./tracker/shuttle_tracker.py
xxxx ok la~

PYTHONPATH 是一个环境变量,用于告诉 Python 在导入模块时额外搜索的目录 , 之后就可以愉快的玩耍了 。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/musk1212/article/details/146983297
今日推荐