提示:python之 “init.py” 文件
文章目录
- 前言
- 一、Python 中 `__init__.py` 文件的理解
- 1. What(是什么)
- 2. Why(为什么需要)
- 3. Where(在哪里使用)
- 4. How(如何使用)
- 二、问题
- 1. 当前py文件引入了其他包,如何直接运行?
前言
提示:版本
Ubuntu 22.04
Python 3.10
提示:以下是本篇文章正文内容,下面案例可供参考
一、Python 中 __init__.py
文件的理解
示例:
1. What(是什么)
-
定义:
__init__.py
是一个特殊文件,用于将普通目录标记为 Python 包(Package)。它在包被导入时自动执行 -
作用:
- 标识包:Python 3.3 之前,目录必须包含
__init__.py
才能被视为包;之后版本中可省略,但显式使用仍是推荐做法 - 初始化代码:可在其中编写初始化逻辑(如设置包级变量、预导入子模块)
- 标识包:Python 3.3 之前,目录必须包含
2. Why(为什么需要)
-
模块化需求:
随着项目规模增大,代码需要分组管理。通过__init__.py
将相关模块组织到包中,便于维护和复用 -
接口控制:
使用__init__.py
定义包的公开接口(如__all__
),隐藏内部实现细节 -
动态加载:
在复杂项目中,可通过__init__.py
动态注册组件或配置环境
3. Where(在哪里使用)
- 位置:
__init__.py
必须位于包目录的根路径下。例如:
- 适用场景:
- 组织大型项目的模块结构。
- 需要动态初始化或统一导出功能的场景
4. How(如何使用)
- 标识包:
创建__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 在导入模块时额外搜索的目录 , 之后就可以愉快的玩耍了 。