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.pswp.cn/pingmian/75435.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75435.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/75435.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Gemini 2.5 Pro與Claude 3.7 Sonnet編程性能對比

AI領域的語言模型競賽日趨白熱化,尤其在編程輔助方面表現突出。 Gemini 2.5 Pro和Claude 3.7 Sonnet作為該領域的佼佼者,本文通過一系列編程測試與基準評估對兩者的編碼功能進行對比分析。 核心結論: ? Gemini 2.5 Pro在SWE Bench硬核編程測試中以63.8%的通過率略勝Clau…

On Superresolution Effects in Maximum Likelihood Adaptive Antenna Arrays論文閱讀

On Superresolution Effects in Maximum Likelihood Adaptive Antenna Arrays 1. 論文的研究目標與實際問題意義1.1 研究目標1.2 解決的實際問題1.3 實際意義2. 論文提出的新方法、模型與公式2.1 核心創新:標量化近似表達式關鍵推導步驟:公式優勢:2.2 與經典方法的對比傳統方…

GIT 撤銷上次推送

注意:在執行下述操作之前先備份現有工作進度,如果不慎未保存,在代碼編輯器中正在修改的文件下,使用CtrlZ 撤銷試試 撤銷推送的方法 情況 1:您剛剛推送到遠程倉庫 如果您的推送操作剛剛完成,并且沒有其他…

透視飛鶴2024財報:如何打贏奶粉罐里的科技戰?

去年乳制品行業壓力還是不小的,尼爾森IQ指出2024年國內乳品市場仍處在收縮區間。但是,總有龍頭能抗住壓力,飛鶴最近交出的2024財報中就有很多亮點。 比如,2024年飛鶴營收207.5億元、同比增長6%,凈利潤36.5億元&#x…

解決STM32CubeMX中文注釋亂碼

本人采用【修改系統環境變量】的方法 1. 使用快捷鍵 win X,打開【系統R】,點擊【高級系統設置】 2. 點擊【環境變量】 3. 點擊【新建】 4.按圖中輸入【JAVA_TOOL_OPTIONS】和【-Dfile.encodingUTF-8】,新建環境變量后重啟CubeMX即可。 解釋…

使用typescript實現游戲中的JPS跳點尋路算法

JPS是一種優化A*算法的路徑規劃算法,主要用于網格地圖,通過跳過不必要的節點來提高搜索效率。它利用路徑的對稱性,只擴展特定的“跳點”,從而減少計算量。 deepseek生成的總是無法完整運行,因此決定手寫一下。 需要注…

Jetpack Compose 狀態管理指南:從基礎到高級實踐

在Jetpack Compose中,界面狀態管理是構建響應式UI的核心。以下是Compose狀態管理的主要概念和實現方式: 基本狀態管理 1. 使用 mutableStateOf Composable fun Counter() {var count by remember { mutableStateOf(0) }Button(onClick { count }) {T…

vant4+vue3上傳一個pdf文件并實現pdf的預覽。使用插件pdf.js

注意下載的插件的版本"pdfjs-dist": "^2.2.228", npm i pdfjs-dist2.2.228 然后封裝一個pdf的遮罩。因為pdf文件有多頁,所以我用了swiper輪播的形式展示。因為用到移動端,手動滑動頁面這樣比點下一頁下一頁的方便多了。 直接貼代碼…

Leetcode hot 100(day 4)

翻轉二叉樹 做法:遞歸即可,注意判斷為空 class Solution { public:TreeNode* invertTree(TreeNode* root) {if(rootnullptr)return nullptr;TreeNode* noderoot->left;root->leftinvertTree(root->right);root->rightinvertTree(node);retu…

C,C++語言緩沖區溢出的產生和預防

緩沖區溢出的定義 緩沖區是內存中用于存儲數據的一塊連續區域,在 C 和 C 里,常使用數組、指針等方式來操作緩沖區。而緩沖區溢出指的是當程序向緩沖區寫入的數據量超出了該緩沖區本身能夠容納的最大數據量時,額外的數據就會覆蓋相鄰的內存區…

大數據(4)Hive數倉三大核心特性解剖:面向主題性、集成性、非易失性如何重塑企業數據價值?

目錄 背景:企業數據治理的困境與破局一、Hive數據倉庫核心特性深度解析1. ?面向主題性(Subject-Oriented):從業務視角重構數據?2. ?集成性(Integrated):打破數據孤島的統一視圖?3. ?非易失…

A股復權計算_前復權數據計算_終結章

目錄 前置: 計算方法推導 數據: 代碼: 視頻: 前置: 1 本系列將以 “A股復權計算_” 開頭放置在“隨想”專欄 2 權息數據結合 “PostgreSQL_” 系列博文中的股票未復權數據,可以自行計算復權日數據 …

Nature:新發現!首次闡明大腦推理神經過程

人類具有快速適應不斷變化的環境的認知能力。這種能力的核心是形成高級、抽象表示的能力,這些表示利用世界上的規律來支持泛化。然而,關于這些表征如何在神經元群中編碼,它們如何通過學習出現以及它們與行為的關系,人們知之甚少。…

Kotlin 集合函數:map 和 first 的使用場景

Kotlin 提供了豐富的集合操作函數,使開發者可以更加簡潔、高效地處理數據。其中,map 和 first 是兩個常用的函數,分別用于轉換集合和獲取集合中的第一個元素。 1. map 的使用場景 場景 1:對象列表轉換 在開發中,我們…

EIR管理中IMEI和IMSI信息的作用

在EIR(設備身份注冊)管理中,IMEI(國際移動設備身份碼)和IMSI(國際移動用戶識別碼)各自具有重要作用,以下是詳細介紹: IMEI的作用 設備身份識別:IMEI是移動設…

MAUI開發第一個app的需求解析:登錄+版本更新,用于喂給AI

vscode中MAUI框架已經搭好,用MAUI+c#webapi+orcl數據庫開發一個app, 功能是兩個界面一個登錄界面,登錄注冊常用功能,另一個主窗體,功能先空著,顯示“主要功能窗體”。 這是一個全新的功能,需要重零開始涉及所有數據表 登錄后檢查是否有新版本程序,自動更新功能。 1.用戶…

KUKA機器人查看運行日志的方法

對于KUKA機器人的運行日志都是可以查看和導出的,方便查找問題。KUKA機器人的運行日志查看方法如下: 1、在主菜單下,選擇【診斷】-【運行日志】-【顯示】下打開; 2、顯示出之前的機器人運行日志; 3、也可以通過【過濾器…

Kali Linux 2025.1a:主題煥新與樹莓派支持的深度解析

一、年度主題更新與桌面環境升級 Kali Linux 2025.1a作為2025年的首個版本,延續了每年刷新主題的傳統。本次更新包含全新的啟動菜單、登錄界面及桌面壁紙,涵蓋Kali標準版和Kali Purple版本。用戶可通過安裝kali-community-wallpapers包獲取社區貢獻的額…

【UVM學習筆記】更加靈活的UVM—通信

系列文章目錄 【UVM學習筆記】UVM基礎—一文告訴你UVM的組成部分 【UVM學習筆記】UVM中的“類” 文章目錄 系列文章目錄前言一、TLM是什么?二、put操作2.1、建立PORT和EXPORT的連接2.2 IMP組件 三、get操作四、transport端口五、nonblocking端口六、analysis端口七…

uni-app項目上傳至gitee方法詳細教程

1. 準備工作 1.1 安裝 Git 下載并安裝 Git:前往 Git 官網,根據操作系統下載安裝包。 配置用戶名和郵箱(需與 Gitee 賬號一致): git config --global user.name "你的Gitee用戶名" git config --global use…