模塊與包的導入

077-模塊-06-模塊搜索順序_嗶哩嗶哩_bilibili

080-包-01-包的概念以及建立包的方式_嗶哩嗶哩_bilibili

088-文件操作-01-文件操作套路以及Python中的對應函數和方法_嗶哩嗶哩_bilibili

注:

1.import math和 from math import *區別

2.

模塊(Module)

- **本質**:以 `.py` 結尾的**單個文件**,包含Python代碼(函數、類、變量等)。

- **作用**:將代碼拆分到不同文件中,避免代碼冗余,方便復用和維護。

包(Package)

在python里,包就是庫

- **本質**:**有層次的文件目錄結構**(即文件夾),用于組織多個模塊和子包。

- **核心特征**:包的根目錄下必須包含一個 `__init__.py` 文件(可以為空),用于標識該目錄是一個包。

都可以通過import進行調用

3.學會查看庫、函數的官方文檔了解其用法、細節

python main.py就是讓運行main.py時,能讓里面的包、模塊成功導入

4.導入自定義庫 / 模塊的常見方式

Python 導入自定義模塊(如自己編寫的?.py?文件或包),需根據模塊的位置關系使用需求選擇語法,核心有以下 4 類:

(1)直接導入整個模塊

適合需要調用模塊內多個函數 / 類的場景,調用時需加「模塊名。對象名」前綴。

示例(假設?circle.py?含?calculate_area?和?calculate_circumference?兩個函數):

# main.py
import circle  # 導入整個 circle 模塊radius = 5
area = circle.calculate_area(radius)       # 通過「模塊名.函數名」調用
circum = circle.calculate_circumference(radius)
print(area, circum)
(2)從模塊導入 “指定對象”

適合僅需模塊內部分函數 / 類的場景,調用時無需加模塊名前綴,更簡潔。

# main.py
from circle import calculate_area  # 只導入 calculate_area 函數radius = 5
area = calculate_area(radius)  # 直接調用函數,無需寫 circle.
print(area)

也可一次性導入多個對象(用逗號分隔):

from circle import calculate_area, calculate_circumference
(3)導入模塊并 “起別名”

用于簡化長模塊名解決命名沖突(比如模塊名與變量 / 其他模塊重名)。

示例(模塊名過長時):

import my_very_long_module_name as mvlm  # 給模塊起別名 mvlm
mvlm.some_function()  # 等價于 my_very_long_module_name.some_function()

也可給導入的對象起別名

from circle import calculate_area as calc_area
area = calc_area(5)
(4)導入 “包” 中的模塊(包是含?__init__.py?的文件夾)

復雜項目中,模塊常放在 “包”(帶?__init__.py?的文件夾)里,需指定 “包路徑” 導入。

假設目錄結構:

project/
├── main.py
└── utils/├── __init__.py  # 空文件,標記 utils 是“包”└── geometry.py  # 含 calculate_area 函數

導入方式:

# 方式1:導入包內的模塊,再調用模塊內對象
from utils import geometry
area = geometry.calculate_area(5)# 方式2:直接導入包內模塊的對象
from utils.geometry import calculate_area
area = calculate_area(5)

5.導入庫 / 模塊的核心邏輯:Python 的 “模塊查找路徑”(與根目錄、解釋器 / 終端目錄的關系)

Python 導入模塊時,不是隨機搜索,而是嚴格按照「預定義的路徑列表」查找 —— 這個列表存于?sys.path?中。理解?sys.path,就能明白 “根目錄、解釋器目錄、終端目錄” 如何影響導入。

(1)sys.path?是什么?

sys.path?是一個列表,存儲著?Python 解釋器會搜索模塊的所有目錄路徑。執行?import xxx?時,解釋器會依次遍歷?sys.path?里的每個目錄,尋找名為?xxx.py(或包?xxx/)的模塊。

可通過代碼打印?sys.path?查看路徑:

import sys
print(sys.path)

輸出大致包含以下幾類路徑(不同環境略有差異):

["終端運行腳本時的“當前目錄”",  # 關鍵!終端所在目錄會被優先加入"Python 解釋器的內置庫目錄",     # 如 .../python3.10/lib(存放 os、sys 等內置模塊)"第三方庫安裝目錄",             # 如 .../site-packages(存放 pandas、numpy 等第三方庫)...
]
(2)“終端的目錄” 如何影響導入?

當你在終端中運行?python main.py?時,Python 會自動把?“終端當前所在的目錄”?加入?sys.path?的最前面。這就是為什么 “終端需要?cd?到項目根目錄再運行腳本”—— 這樣項目根目錄下的自定義模塊(如?circle.py)才能被找到。

舉個例子:

  • 終端當前目錄是?/home/user/project/(項目根目錄,含?main.py?和?circle.py);
  • 運行?python main.py,Python 會把?/home/user/project/?加入?sys.path
  • 當?main.py?執行?import circle?時,解釋器會在?sys.path[0](即?/home/user/project/)中找到?circle.py,成功導入。
(3)“解釋器的目錄” 有什么用?

Python 解釋器的安裝目錄(如?/usr/local/bin/python3?所在層級)中,包含?Python 內置庫(如?os.pysys.py)和?標準庫(如?math.pydatetime.py)。這些目錄會被加入?sys.path,因此你能直接?import math—— 解釋器會自動去自身的庫目錄中查找。

(4)“項目根目錄” 的角色(IDE 中的根目錄設置)

IDE(如 VSCode、PyCharm)里的 “項目根目錄”,本質是模擬 “終端?cd?到根目錄運行腳本” 的效果

  • IDE 運行腳本時,會自動把 “項目根目錄” 加入?sys.path
  • 這樣,你在代碼中導入根目錄下的模塊(如?from utils import xxx),就和 “終端在根目錄運行” 的效果一致,避免因 “開發時路徑錯誤” 導致導入失敗。
(5)核心邏輯總結:導入 = “在?sys.path?列表的目錄里,找對應模塊文件”

無論導入自定義模塊、第三方庫還是內置庫,Python 都遵循以下流程:

  1. 將需要的 “搜索目錄”(終端當前目錄、解釋器庫目錄、第三方庫目錄等)加入?sys.path
  2. 遍歷?sys.path?里的每個目錄,檢查是否存在要導入的模塊(.py?文件或包文件夾);
  3. 找到則導入,找不到則報?ModuleNotFoundError

示例:“終端目錄不對導致導入失敗”

假設目錄結構:

project/
├── main.py
└── circle.py

main.py?中含?import circle

  • 情況 1:終端?cd?到?project/,運行?python main.py?→ 成功(project/?在?sys.path?中,能找到?circle.py)。
  • 情況 2:終端在?project/?的父目錄(如?/home/user/),直接運行?python project/main.py?→ 失敗(此時?sys.path?的 “當前目錄” 是?/home/user/,不含?circle.py,會報?ModuleNotFoundError)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/96030.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/96030.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/96030.shtml

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

相關文章

Docker Compose 多種安裝方式 (Alibaba Cloud Linux 3 環境)

Docker Compose 多種安裝方式,適用于不同場景(如依賴系統包管理器、使用 Python 工具鏈、集成 Docker 插件等)。以下是常見的方案,尤其針對 Alibaba Cloud Linux 3 環境適配: 一、二進制包安裝(推薦&#…

Dubbo3序列化安全機制導致的一次生產故障

前言 記錄一次 Dubbo 線上故障排查和原因分析。 線上 Dubbo 消費者啟動有錯誤日志如下,但是不影響服務啟動。 java.lang.TypeNotPresentException: Type org.example.model.ThirdParam not present ... Caused by: java.lang.ClassNotFoundException: org.example.m…

centos7 docker離線安裝

介紹 本文主要講了如何在完全沒網的情況下安裝docker(適合于高網絡安全要求的企業) 本文適用的centos版本: [root0001 temp]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) 采用docker in docker下載依賴 實際試驗后&…

東京本社招聘 | 財務負責人 多個日本IT崗位(Java/C++/Python/AWS 等),IT營業同步招募

大家好,本期為大家帶來我司在東京GSD本社及其他會社千葉地區的招聘崗位。 涵蓋 財務負責人、Java開發工程師、數據中心維護工程師、項目經理、IT營業 等多個職位。 歡迎有志之士加入!🔹 財務負責人(東京本社)工作內容日…

四數之和

目錄 一:題目鏈接 二:題目思路 三:代碼實現 一:題目鏈接 理解題目需要注意,如果兩個四元組元素一一對應,則認為兩個四元組重復,選擇其中一個四元組即可。比如 [ 0 , 1 , 0 , 2] 和 [ 1 , …

【序列晉升】29 Spring Cloud Task 微服務架構下的輕量級任務調度框架

Spring Cloud Task作為微服務架構中的輕量級任務調度框架,為開發人員提供了一種構建短生命周期微服務任務的便捷方式。它允許開發者快速創建、執行和管理一次性任務或短期批處理作業,任務執行完成后自動關閉以釋放系統資源,避免了傳統長期運行…

【1分鐘速通】 HTML快速入門

HTML&#xff08;HyperText Markup Language&#xff0c;超文本標記語言&#xff09; 是構建網頁的基礎語言。它通過 標簽&#xff08;Tag&#xff09; 來描述網頁的結構和內容&#xff0c;常與 CSS&#xff08;負責樣式 – <style></style>&#xff09;和 JavaScr…

【GeoServer】WMS GetFeatureInfo URL 逐個參數解釋

我來把你構造的這個 WMS GetFeatureInfo URL 逐個參數解釋一下&#xff0c;方便你理解&#xff1a;http://127.0.0.1:8090/geoserver/xxxx/wms? SERVICEWMS& VERSION1.1.1& REQUESTGetFeatureInfo& QUERY_LAYERSloess:yourLayer& LAYERSloess:yourLayer& …

OBS直播教程:點歌直播間怎么弄?直播點歌用什么軟件?

OBS直播教程&#xff1a;點歌直播間怎么弄&#xff1f;直播點歌用什么軟件&#xff1f; 第一步&#xff1a;安裝OBS直播軟件&#xff0c;如果你電腦已經安裝了OBS&#xff0c;請直接看第二步 OBS直播軟件下載地址①&#xff1a; https://d.obscj.com/obs-Studio-29.1.3-Full-…

【數據庫】Redis詳解:內存數據庫與緩存之王

什么是Redis&#xff1f; Redis&#xff08;Remote Dictionary Server&#xff09;是一個開源的、基于內存的數據結構存儲系統&#xff0c;可以用作數據庫、緩存和消息代理。它支持多種數據結構&#xff0c;如字符串、哈希、列表、集合、有序集合等&#xff0c;具有極高的性能和…

【iOS】 單例模式

1. 認識單例模式首先讓我們先看下關于單例模式的定義&#xff08;來自于《設計模式》(Addison-Wesley,1994)&#xff09;一個類有且僅有一個實例&#xff0c;并且自行實例化向整個系統提供。如果說每一個人都是一個類&#xff0c;那么從他出生開始&#xff0c;他就是生活中的唯…

多目標輪廓匹配

前面我們使用模板匹配&#xff0c;得到的結果都是一個圖&#xff0c;那么如果我們圖片中有許多我們的目標&#xff0c;那么該如何找出來呢&#xff1f;如上我們圖片中有許多箭頭和我們的模板一致&#xff0c;只不過方向不對&#xff0c;那么該如何匹配呢&#xff1f;圖片和模板…

【C++】簡單介紹lambda表達式

各位大佬好&#xff0c;我是落羽&#xff01;一個堅持不斷學習進步的學生。 如果您覺得我的文章還不錯&#xff0c;歡迎多多互三分享交流&#xff0c;一起學習進步&#xff01; 也歡迎關注我的blog主頁: 落羽的落羽 文章目錄一、 什么是lambda表達式二、 表達式語法三、lambd…

磁共振成像原理(理論)4:自由進動和弛豫 (Free Precession and Relaxation)

當磁化自旋系統被射頻脈沖擾動而偏離其熱平衡態后&#xff0c;一旦移除外部激勵并給予足夠時間&#xff0c;系統將根據熱力學定律返回平衡態。這一過程包含三個特征現象&#xff1a; (a) 自由進動——宏觀磁化矢量 (M?\vec{M}M) 繞( B0?\vec {B_0}B0?? )場的進動&#xff1…

ubuntu 20.04 安裝spark

安裝openjdk21 下載 wget https://download.java.net/openjdk/jdk21/ri/openjdk-2135_linux-x64_bin.tar.gz解壓 tar -xvf openjdk-2135_linux-x64_bin.tar.gzsudo mv jdk-21/ /opt/jdk-21/設置環境變量 echo export JAVA_HOME/opt/jdk-21 | sudo tee /etc/profile.d/java2…

第三方區塊鏈應用測評:【多簽錢包合約安全評估_閾值簽名機制與私鑰存儲安全性測試】

閾值簽名機制安全測試密碼學審計 采用門限簽名方案&#xff08;TSS&#xff09;的多簽錢包需驗證其閾值BLS簽名或ECDSA簽名算法的正確性。測試重點包括&#xff1a;分布式密鑰生成&#xff08;DKG&#xff09;過程的保密性&#xff08;無密鑰信息泄露&#xff09;、簽名碎片驗證…

大模型處理長文檔的挑戰和解決方案?

當前&#xff0c;AI 應用正處于極速發展階段&#xff0c;大語言模型&#xff08;LLM&#xff09;與檢索增強生成&#xff08;RAG&#xff09;系統已成為構建智能問答、知識管理等高階 AI 應用的核心引擎&#xff0c;被廣泛應用于金融分析、學術研究、企業合規等多個領域。然而&…

JavaWeb--day1--HTMLCSS

(以下內容全部來自上述課程及課件) web開發介紹 1. 什么是web&#xff1f; Web&#xff1a;全球廣域網&#xff0c;也稱為萬維網&#xff0c;能夠通過瀏覽器訪問的網站。 2. Web網站的工作流程 3. Web標準 Web標準也稱為網頁標準&#xff0c;由一系列的標準組成&#xf…

OpenEuler安裝gitlab,部署gitlab-runner

目錄 一、安裝gitlab 二、安裝部署docker設置源 三、下載部署runner ?編輯 四、構建CI/CD 一、安裝gitlab 1.查看OpenEuler版本 [rootlocalhost ~]# cat /etc/os-release NAME"openEuler" VERSION"24.03 (LTS-SP1)" ID"openEuler" VERSI…

實戰項目-----在圖片 hua.png 中,用紅色畫出花的外部輪廓,用綠色畫出其簡化輪廓(ε=周長×0.005),并在同一窗口顯示

實戰項目實現以下功能&#xff1a;對圖片 hua.png 進行輪廓提取&#xff0c;并在同一窗口中完成以下兩個繪制操作&#xff1a;用紅色畫出花的外部輪廓&#xff08;即最外層輪廓&#xff09;用綠色畫出該輪廓的近似多邊形&#xff0c;其中近似精度參數 ε 設置為輪廓周長的 0.00…