python的模組 包 庫區別。匯入包 模組的方式

2021-10-10 00:01:44 字數 2837 閱讀 7783

當我們使用 import 語句匯入模組時,python直譯器首先會去內建命名空間中尋找,即判斷匯入的模組是不是內建模組(例如time模組就是python內建模組),然後再去 sys.path 列表中定義的路徑從前往後尋找 .py檔案

如下是在個人筆記本上輸出的 sys.path列表:

>>

>

import sys

>>

> sys.path[''

,'d:\\pycharm\\pychon_jieshiqi\\python37.zip'

,'d:\\pycharm\\pychon_jieshiqi\\dlls'

,'d:\\pycharm\\pychon_jieshiqi\\lib'

,'d:\\pycharm\\pychon_jieshiqi'

,'d:\\pycharm\\pychon_jieshiqi\\lib\\site-packages'

]>>

>

包是乙個有層次的檔案目錄結構,它定義了由相關的(或者說是在這個模組裡需要呼叫另乙個模組)n個模組或n個子包。包含__init__.py檔案的目錄,這個目錄下一定的有則會個__init__.py檔案和其他模組或子包。在呼叫這個包時都會執行package 包下和子包下的init檔案。

現在有如下目錄結構:

├─root

│ ├─pk_1

│ │ ├─__init__.py

│ │ ├─m1.py

│ ├─pk_2

│ │ ├─__init__.py

│ │ └─m2.py

│ ├─__init__.py

│ ├─test.py

pk_1 和 pk_2 包中的init.py 檔案都為空,root包下的 test.py 想要使用 pk_1 包下 m1模組中的方法,可以使用如下語句:

#test.py

from pk_1 import m1

m1.fun_1(

)# fun_1() 為m1模組中的方法

但是使用如下語句,就會丟擲異常:

#test.py

from pk_1 import

*m1.fun_1(

)# 異常資訊:

nameerror: name 'm1'

isnot defined

****

****

****

****

****

****

****

****

****

****

****

****

****

****

****

*******

****

****

****

****

****

****

****

****

****

****

****

****

****

****

*******

#test.py

import pk_1

pk_1.m1.fun_1(

)# 異常資訊:

attributeerror: module 'pk_1' has no attribute 'm1'

這時候可以在 pk_1 包中的__init__.py 中 進行 包提公升(在包中提公升匯入許可權),pk_1 包的init.py 檔案內容如下:

#pk_1包下的_init_.py

from pk_1.m1 import fun_1

然後在 test.py 檔案中可以直接通過包名引入方法:

from pk_1 import fun_1 # 或 from pk_1 import *

fun_1(

)

import pk_1

pk_1.fun_1(

)

這個就是 包中init.py 檔案存在的意義,可以將相關的匯入語句 或 提公升匯入許可權的語句 寫在init.py檔案中,這樣使用者就不需要了解包中的內部結構,可以直接通過包名 呼叫該包(package)中某個模組的方法~

參照其他程式語言的乙個喊法;完成一定功能的**集合,具體表現可以是乙個模組,也可以是包。庫可以理解為倉庫,例如標準庫,則是一組很多的想numpy,matplotlib等這麼多的包,或者模組。

模組《包《庫

import m          #匯入單個模組

import p.m #匯入p包裡的某單個模組,會自動執行p裡面的__init__.py檔案

import p.sub_p.m #匯入p包裡的子包sub_p裡的單個m模組,會自動執行p裡的__init__.py和sub_p裡的__init__.py檔案

import m1,m2 #匯入多個模組,或者用兩次import

補充:如果匯入的是乙個包:

①預設不會匯入任何模組

②解決方案:②.1 在__init__.py檔案中,再次匯入需要的模組(該模組需要指定乙個絕對路徑,例如加上包名)

②.2 應該以from ... import ... 的形式匯入(包》模組》模組資源),匯入模組資源時也可以是多個。

注意匯入順序:從from到import的順序應該是包》模組》模組資源這樣從大到小的順序

python模組匯入與模組包匯入

main.py程式第一次匯入指定檔案mod.py時,執行 找到模組檔案mod.py 編譯成位元組碼 可選 執行.pyc位元組碼,建立mod.py中定義的物件。匯入模組後,模組物件會被儲存在sys.modules的表中。每次匯入時,若此表中已存在相關模組,以上3步會被跳過。1.搜尋模組檔案 按順序 程...

python 包 模組匯入

os.getenv path 系統可執行程式位置 sys.path可匯入的python包位置 python module 的 path 屬性 可顯示每個包的檔案位置 what is pythonpath,what is python package what can we do with init ...

匯入模組 包

什麼是模組 乙個模組就是包含了python定義和宣告的檔案,檔名就是模組名字加上.py 但其實import載入的模組分為4個通用類別。1 使用python編寫的 2 已被編譯為共享庫或dll的c或c 擴充套件 3 包好一組模組的包 4 使用c編寫並鏈結到python直譯器的內建模組 如何匯入模組 同...