1. 程式人生 > >python之模塊和包

python之模塊和包

sys.path 不同的 oot 鏈接庫 獨立 python代碼 都是 模塊 查詢

一 Python模塊簡介

Python模塊:
可以將代碼量較大的程序分割成多個有組織,彼此間獨立但又能互相交互的代碼片段,這些自我包含的有組織的代碼段就是模塊

模塊在物理形式上表現為以.py 結尾的代碼文件
一個文件被看做一個獨立的模塊,一個模塊也可以被看做是一個文件
模塊的文件名就是模塊的名字加上擴展名.py
每個模塊都有自己的 名稱空間
Python 允許“導入”其他模塊以實現代碼重用,從而也實現了將獨立的代碼文件組織成更大的程序系統
Python 中,模塊也是對象
在一個模塊的頂層定義(全局變量)的所有變量都在被導入時成為了被導入模塊的屬性

二 Python 程序架構:

一個Python程序通常包括一個頂層文件和其他的模塊文件(0個,1個或多個)

頂層文件:包含了程序的主要控制流程
模塊文件:為頂層文件或其他模塊提供各種功能性組件
模塊首次導入(或重載)時,Python會立即執行模塊文件的頂層程序代碼(不在函數內的代碼),而位於函數體內的代碼直到函數被調用後才會執行
Python自帶的模塊稱為Python的標準庫模塊
模塊搜索:
Python解釋器在import 模塊是必須先找到對應的模塊文件
程序的主目錄
PYTHONPATH(如果設置了此變量)
標準鏈接庫目錄
任何.pth文件的內容(如果存在.pth文件)
這四個組件組合起來及sys.path所包含的路徑,而Python 會選擇在搜索路徑中的第一個符號導入文件名的文件

模塊的導入需要一個叫做“路徑搜索”的過程,即在文件系統“預定義區域”中查找mymodule 文件,這些預定義區域只不過是你的python搜索路徑的集合,路徑搜索和搜索路徑是兩個不同的概念

前者是指查找某個文件的操作,後者是去查詢一組目錄。
默認搜索路徑是在編譯或安裝時指定的,它可以在一個或兩個地方修改
一個是啟動 Python 的 shell 或命令行的 PYTHONPATH 環境變量。 該變量的內容是一組用冒號分割的目錄路徑。 如果你想讓解釋器使用這個變量, 那麽請確保在啟動解釋器或執行 Python 腳本前設置或修改了該變量。
解釋器啟動之後, 也可以訪問這個搜索路徑, 它會被保存在 sys 模塊的 sys.path 變量裏。不過它已經不是冒號分割的字符串, 而是包含每個獨立路徑的列表。下面是一個 Unix 機器搜索路徑的樣例。切記, 搜索路徑在不同系統下一般是不同的。
技術分享圖片
這是一個列表,因此我們可以進行修改,如果你需要導入的模塊的目錄不在sys.path中,則可以使用append()進行對此列表操作,以導入此模塊
技術分享圖片
將上述目錄加入到sys.path中
技術分享圖片
查看
技術分享圖片
模塊導入
技術分享圖片
只要這個列表中包含這個文件,它就會被正確的導入,當然,這個方法是將其導入到文件的尾部,也可以使用insert()將其導入指定位置

三 pycharm中模塊的導入

1 同一個文件夾中的配置

A 定義一個被導入的模塊
技術分享圖片
B 導入模塊到目標模塊
技術分享圖片

C使用name獲取模塊的名稱,當為模塊內部時其值為mian,若為導入的,則其名為模塊名
一個模塊文件可以同時支持頂層執行(作為頂層文件)或被導入(作為模塊文件)
每個模塊都有個名為name的內置屬性,python會自動設置該屬性
如果文件是以頂層程序文件執行,在啟動時,name的值為“main
如果是被導入,則name的值為模塊名
可以在模塊文件中檢測自己的name順序ing,以之實現在執行時運行指定的代碼,常用於模塊的自我測試

技術分享圖片
D將其導入執行模塊進行查看:
技術分享圖片
E使用if語句進行判斷,已達到不將被導入模塊的執行結果在導入模塊中執行:
技術分享圖片
F將其導入並驗證:
技術分享圖片
G將該配置導入到指定模板:(ctrl+alt+s)進行打開其配置:
技術分享圖片

2 將被導入模塊和導入模塊放置在不同的文件夾中

包:包用於將一組模塊歸並到一個目錄中,此目錄及為包,目錄名及為包名
包是一個有層次的文件目錄結構,定義了一個由模塊和子包組成的Python應用程序執行環境
基於包,Python在執行模塊導入時可以指定模塊的導入路徑
Import dir1.dir2.mod1
要使用如下的package1,則py_pkg_mod容器必須要在模塊中搜索路徑中
Import package1.mod1
包導入語句的路徑內的每個目錄內都必須有init.py 文件
init.py可包含python代碼,但通常為空,僅用於扮演包初始化的掛鉤、替目錄產生模塊命名空間以及使用目錄導入時實現from* 行為的角色
pycharm中包的創建:
使用alt+ins快捷鍵可以指定創建的是文件還是包,Python package為帶有init.py的Python包。
技術分享圖片
技術分享圖片
A修改其配置使得不同文件夾的文件可以直接導入(選擇Sources Root)
技術分享圖片
B再次執行則可以進行導入並運行:
技術分享圖片
C取消則不能運行:
技術分享圖片
D在被導入模塊所在的文件夾創建init.py的文件並將其本地模塊導入到此init.py文件中
技術分享圖片
E在目標文件中導入該模塊並運行,則可以正常運行
技術分享圖片

三 from ... import ...的應用

For-import 語句
常用於導入指定模塊放入部分屬性至當前名稱空間(不需要加上該模塊的名稱)
From module import name1[,name2[nameN]]
Import 和 from都是隱形賦值語句
Import 將整個模塊對象賦值給一個變量名(模塊名)
From 將一個或多個變量名賦值給導入此模塊的模塊中的同名對象,如果當前環境中有與導入模塊相同的名稱,其將會被新導入的名稱所覆蓋
模塊就是名稱空間
import的工作機制
1 找到模塊文件
在指定的路徑下搜索模塊文件
2 編譯成字節碼
文件導入時就會編譯,因此,頂層文件的.pyc 字節碼文件在內部使用後會被丟棄,只有被導入的文件才會留下.pyc文件
3 執行模塊的代碼來創建其所定義的對象
模塊文件中的所有語句會依次執行,從頭至尾,而此步驟中任何對變量名的復制運算,都會產生所得到的模塊文件的屬性
註意:模塊只在第一次導入時才會執行如上步驟,
後續的導入操作只不過是提取內存中已加載的模塊對象
reload()可用於重新加載模塊
A 相同文件夾的模塊導入:
技術分享圖片
B 全局變量的定義
技術分享圖片
C 導入全局變量並運行,則可以運行。
技術分享圖片
D 導入函數並運行,則可以運行。
技術分享圖片
E 修改導入模塊的模塊名或函數、裝飾器名使用as 即可修改:
技術分享圖片

四 、第三方模塊的安裝

微信基本信息的獲取相關的軟件:(itchat)
1 下載並安裝Python-pip
技術分享圖片

如此則表示安裝成功:
技術分享圖片
2 安裝itchat(微信插件)
在聯網的狀況下進行安裝
使用pip安裝
技術分享圖片
使用pycharm安裝
使用ctrl+alt+s進入此界面並按右上角的加號(+)
技術分享圖片
進入之進行查找itchat,並按左下角的intall Package 即可安裝
技術分享圖片

python之模塊和包