提示: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 在導入模塊時額外搜索的目錄 , 之后就可以愉快的玩耍了 。