Python包
- 包用於將一組模塊歸併到一個目錄中,此目錄即爲包,目錄名即爲包名
- 包是一個有層次的文件目錄結構,它定義了一個由模塊和子包組成的Python應用執行環境
- 基於包,Python在執行模塊導入時可以指定模塊的導入路徑:
- import dir1.dir2.mod1
- import dir1.dir2.mod1
模塊的頂層執行及被導入:
一個模塊文件可以同時支持頂層執行(作爲頂層文件)或被導入(作爲模塊文件)
每個模塊都有個名爲__name__的內置屬性,Python會自動設置該屬性
如果文件是以頂層程序文件執行,在啓動時,__name__的值爲"__main__"
如果是被導入,則__name__的值爲模塊名
可以在模塊文件中檢測自己的__name__屬性,以之實現在執行時運行指定的代碼
常用於模塊的自我測試:
#!/usr/bin/python
#
def testFunc():
print "hello,..."
if __name__ == "__main__":
testFunc()
發佈Python模塊或程序:
Python模塊、擴展和應用程序可以按以下幾種形式進行打包和發佈
- 壓縮文件(使用distutils)
- Windows的zip文件和類Unix平臺的.tar.gz文件
- 自動解包或自動安裝可執行文件
- Windows中的.exe文件
- 自包含的,不要求安裝的預備運行可執行程序
- Windows的.exe文件、Unix上帶有一個小的腳本前綴的ZIP壓縮文件、Max上的.app文件等
- 平臺相關的安裝程序
- Windows上的.msi文件、Linux上常見的.rpm、src.rpm和.deb文件等
- Python eggs
- 較流行的第三方擴展
使用distutils發佈模塊:
- disutils模塊能夠幫助完成模塊或程序發佈
- 發佈”是指一個文件集合,這些文件聯合在一起可使用distutils構建、打包和發佈模塊
- 創建好的發佈可以用於安裝,也可上傳到PyPI與他人共享
- 創建發佈
- 將各代碼文件組織到模塊容器中
- 準備一個README或README.txt文件
- 而後在容器中創建setup.py文件
- setup.py的常用參數:
name 包的名稱(必須)
Version 版本號(必須)
author
author_email
maintainer
maintainer_email
py_modules 各模塊名稱組成的列表,此些模塊可能位於包的根目錄下(modname),也可能位於某子包目錄中(subpkg1.modname)
platforms 平臺列表
license 許可證
packages 各子包名稱的列表
url
download_url
大體分爲兩類:元數據信息和包中的內容列表
完成打包:
在要發佈的容器目錄中執行”python setup.py sdist”命令打包格式:
python setup.py sdist
可以爲sdist指定格式:--formats=***
zip: zip file
gztar: tar.gz file
bztar: tar.bz2 file
ztar: tar.Z file
tar: tar file
python setup.py bdist
可以爲bdist指定格式:--formats=***
gztar: tar.gz file
ztar: tar.Z file
tar: tar file
zip: zip file
rpm: RPM Package
pkgtool: Solaris pkgtool
wininst: Windows上自解壓的zip格式的包
msi: Microsoft Installer
- 獲取幫助的方式:
python setup.py --help
python setup.py --help-commands 所有可以使用的命令,如build,install
python setup.py COMMAND --help 獲取特定命令的幫助
python setup.py COMMAND --help=formats 獲取特定命令支持使用的格式