当前位置: 首页 > news >正文

python之 “__init__.py” 文件

提示: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 才能被视为包;之后版本中可省略,但显式使用仍是推荐做法
    • 初始化代码:可在其中编写初始化逻辑(如设置包级变量、预导入子模块)

2. Why(为什么需要)

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

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

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


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 在导入模块时额外搜索的目录 , 之后就可以愉快的玩耍了 。

在这里插入图片描述

http://www.dtcms.com/a/109192.html

相关文章:

  • DeepSeek-R1 面试题汇总
  • SAP-ABAP:SAP ABAP UPDATE 语句用法详解
  • 如何像母语一样学习英语
  • VMware ESXi:企业级虚拟化平台详解
  • MySQL-- 函数(单行函数): 日期和时间函数
  • Linux内核TCP/IP协议栈中的设计模式:从面向对象到系统级软件的跨界实践
  • 数据结构——顺序表
  • 思维链(Chain-of-Thought, CoT)与强化学习区别
  • Java基础之反射的基本使用
  • linux命令-find指令
  • 卫星升空织密天网,卫星电话架起天地一体通信桥梁
  • 数据结构与算法——单链表的实现及增、插、删、查、印、毁
  • 【c++深入系列】:类与对象详解(中)
  • Golang定时任务管理(中文日志+防重复执行)
  • React 项目使用 pdf.js 及 Elasticpdf 教程
  • lvgl避坑记录
  • lodash库介绍(一个现代JavaScript实用工具库,提供模块化、性能优化和额外功能)JavaScript库(防抖、节流、函数柯里化)JS库
  • 每日一题洛谷P8664 [蓝桥杯 2018 省 A] 付账问题c++
  • 【C++】nlohmann::json 配置加载技术实践:从基础到高级应用
  • OpenLayers:如何控制Overlay的层级?
  • 如何为Linux/Android Kernel 5.4和5.15添加 fuse passthrough透传功能 ?
  • 如何通过管理系统提升团队协作效率
  • 大模型学习二:DeepSeek R1+蒸馏模型组本地部署与调用
  • css动态设置div宽高,calc函数
  • Unity中的动态合批使用整理
  • Vue中虚拟DOM创建到挂载的过程
  • Milvus 向量数据库详解:从核心概念到 Docker 部署实践
  • redis 安装
  • windows批处理命令,执行一个python文件,将命令保存为xxxx.bat文件
  • angular+form实现2048小游戏