Python 模塊學習

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


模塊表現形式爲以.py結尾的代碼文件


一個文件被看作一個獨立的模塊,一個模塊也可以被看作是一個文件。


模塊的文件名就是模塊的名字加上擴展名.py


每個模塊都有自己的名稱空間


Python程序架構

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

頂層文件:包含了程序的主要控制流程

模塊文件:爲頂層文件或其他模塊提供各種功能性組件

模塊首次導入(或重載)時,Python會立即執行模塊文件的頂層程序代碼,聲明函數對象,而位於函數體內的代碼直到函數被調用後纔會執行。

wKiom1XBRJGz2Zm6AAD7hBgGV_4239.jpg

模塊的執行環境

模塊是被導入的,但模塊也可以導入和使用其他模塊,這些模塊可以用Python或其他編程語言寫成


模塊可內含變量、函數以及類來進行其工作,而函數和類可以包含變量和其他元素


如果打算以多個程序文件來組織你的Python程序,只有一個文件可以作爲頂層執行文件,可以在頂層包含很多程序控制流,其他被導入的文件,都應該只包含類、變量、函數。


導入模塊

在導入模塊時只能使用模塊名,而不是帶.py後綴的模塊文件名。

導入指定模塊,會生成一個以模塊名命名的名稱空間。


impor語句導入模塊:

import module

導入時可以給名稱空間指定一個別名,如果使用別名,就只能使用別名調用了。

import module as module_alias

from-import 語句:

常用於只導入指定模塊的部分屬性至當前名稱空間

from module import name1[,name2,...]


import 和 from 都是隱性賦值語句

import將整個模塊對象賦值給一個變量名

from將一個或多個變量名賦值給導入此模塊的模塊中的同名對象,如果導入的變量和本地變量重名,則會覆蓋本地的。

import的工作機制


1、尋找模塊文件,2、編譯成字節碼,3、執行模塊的代碼來創建其所定義的對象。注意:模塊只有在第一次導入時纔會執行如上步驟; 

後續的導入操作只不過是提取內存中已加載的模塊對象,reload()可用於重新加載模塊;


模塊搜索

Python解釋器在import模塊時必須先找到對應的模塊文件

程序的主目錄

Python path目錄

標準鏈接庫目錄

任何.pth文件的內容

這四個組件組合起來即爲sys.path所包含的路徑,而Python會選擇在搜索路徑中的第一個符合導入文件名的文件。


導入一個自定義模塊的過程:

創建目錄,用於保存自定義模塊

mkdir /usr/local/mylib


進入python命令行,添加模塊的搜索路徑

import sys

sys.path

sys.path.append('/usr/local/mylib')


然後就可以直接用import導入自定義的模塊了


Python執行被導入的模塊的__name__屬性是該模塊的名稱,而如果是直接執行該模塊文件,模塊的__name__屬性是'main'。 下圖的if段代碼則是模塊的測試代碼,在模塊被導入時是不會執行那段代碼的。 只有直接運行纔會執行。


添加模塊文件的測試代碼

wKioL1XCwIrCynlVAAD5oDxq2sY942.jpg


Python 打包

包用於將一組模塊歸併到一個目錄中,此目錄即爲包,目錄名即爲包名。

    包是一個有層次的文件目錄結構,它定義了一個由模塊和子包組成的Python應用程序執行環境

    基於包,Python在執行模塊導入時可以指定模塊的導入路徑

    import dir1.dir2.mod1


第一個容器文件夾必須要在模塊的搜索路徑中,在子目錄中需要建立一個__init__.py的文件,一般爲空,在調用模塊時只需要使用 import '子目錄名'.模塊名稱

wKiom1XCyoPStPnTAAVhrhtyzGg520.jpg

模塊的相對路徑引用

from .bar import fn

表示引用當前模塊中bar子模塊,中的fn函數;


from .. import fn2

表示引用當前模塊中.init.py文件中的fn2函數;


注:如果用相對路徑引入模塊,那麼這個文件不能被直接執行,只能做爲模塊被引入。


使用disutils發佈模塊

wKioL1XDAd2BT8F9AAOU105cVLg715.jpg


setup.py 中可用參數:wKioL1XCzl-DQKG7AAHYZc6iELg801.jpg

platforms:平臺列表

license:許可證

py_modules:各模塊名稱組成的列表,此些模塊可能位於包的根目錄下(module name),也可能位於某子包目錄中(subpkg1.module name)



執行打包

python setup.py sdist   //源碼包發行版

    可以爲sdist指定格式:

zip,gztar,bztar,ztar,tar

使用--formats= 指定格式


python setup.py bdist   //二進制發行版

    可以爲sdist指定格式:

        gztar,ztar,rpm,pkgtool,



獲取幫助的方式:

    Python setup.py --help

    Python setup.py --help-commands:顯示所有可以使用的命令的幫助

    Python setup.py COMMAND --help: 獲取特定命令的幫助

    Python setup.py COMMAND --help-formats: 獲取特定命令支持使用的格式

簡單的安裝工具:pip 、easy_install


安裝包:

    python setup.py install

    build and install

    python setup build:

        --build-base=/path/to/buildir

        lib,lib.platform

第三方模塊的默認安裝路徑通常爲:/usr/local/python27/lib/python2.7/site-packages


自定義安裝路徑:

    --user= 指定安裝在用戶家目錄下的某個路徑中。

    --prefix= 指定Python庫文件的安裝路徑

    --exec-prefix= 指定和Python無關的,由其他語言編寫的模塊安裝路徑


深度定製:

    --install-purelib=/path/ 指定純Python編寫的庫文件存放的位置

    --install-platlib=/path/ 由其他語言所實現的庫文件的存放位置

    --install-lib=/path/ 不加區分的將所有庫安裝到指定位置


    --install-scripts=/path/ 可執行文件的安裝路徑

    --install-data= 指定數據文件的安裝路徑

    --install-headers= 指定C頭文件的安裝路徑


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章