可以將代碼量較大的程序分割成多個有組織的、彼此獨立但又能互相交互的代碼片段,這些自我包含的有組織的代碼段就是模塊
模塊表現形式爲以.py結尾的代碼文件
一個文件被看作一個獨立的模塊,一個模塊也可以被看作是一個文件。
模塊的文件名就是模塊的名字加上擴展名.py
每個模塊都有自己的名稱空間
Python程序架構
一個python程序通常包括一個頂層程序文件和其他的模塊文件(0個,1個或多個)
頂層文件:包含了程序的主要控制流程
模塊文件:爲頂層文件或其他模塊提供各種功能性組件
模塊首次導入(或重載)時,Python會立即執行模塊文件的頂層程序代碼,聲明函數對象,而位於函數體內的代碼直到函數被調用後纔會執行。
模塊的執行環境
模塊是被導入的,但模塊也可以導入和使用其他模塊,這些模塊可以用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段代碼則是模塊的測試代碼,在模塊被導入時是不會執行那段代碼的。 只有直接運行纔會執行。
添加模塊文件的測試代碼
Python 打包
包用於將一組模塊歸併到一個目錄中,此目錄即爲包,目錄名即爲包名。
包是一個有層次的文件目錄結構,它定義了一個由模塊和子包組成的Python應用程序執行環境
基於包,Python在執行模塊導入時可以指定模塊的導入路徑
import dir1.dir2.mod1
第一個容器文件夾必須要在模塊的搜索路徑中,在子目錄中需要建立一個__init__.py的文件,一般爲空,在調用模塊時只需要使用 import '子目錄名'.模塊名稱
模塊的相對路徑引用
from .bar import fn
表示引用當前模塊中bar子模塊,中的fn函數;
from .. import fn2
表示引用當前模塊中.init.py文件中的fn2函數;
注:如果用相對路徑引入模塊,那麼這個文件不能被直接執行,只能做爲模塊被引入。
使用disutils發佈模塊
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頭文件的安裝路徑