python的包管理系統

egg文件是什麼,與一般的包目錄有什麼不同?

    egg是一種包格式,可以是壓縮的,也可以是目錄,最常用的是zip。使用egg格式有如下好處:

  • 使一些工具成爲可能,如包管理系統easy install;
  • 安裝簡單,將其絕對路徑加添到sys.path或PYTHONPATH即可,無需編譯安裝。當egg包中包含c擴展文件和非python數據文件時,會複雜些;
  • 可以包含包的元數據信息,如:依賴包;
  • 使得支持命名空間(namespace),這樣大項目可以分爲多個小的獨立包,分開發布。例如zope.* 可以分成zope.a, zope.b ......布成;
  • 支持運行時指定包版本,如pkg_resources的require操作。經試驗,require支持多個獨立的區間:require('mox<0.1, >0.4, <0.6'),mox不區分大小寫;
  • 支持擴展,如entry point。疑問

   當egg是一個zip壓縮文件時,內部結構如下:

$ unzip -l /usr/local/lib/python2.7/dist-packages/oslo.config-1.1.0-py2.7.egg 
Archive:  /usr/local/lib/python2.7/dist-packages/oslo.config-1.1.0-py2.7.egg
  Length      Date    Time    Name
---------  ---------- -----   ----
      560  2013-09-09 09:43   EGG-INFO/PKG-INFO
        1  2013-09-09 09:43   EGG-INFO/dependency_links.txt
        5  2013-09-09 09:43   EGG-INFO/top_level.txt
        5  2013-09-09 09:43   EGG-INFO/namespace_packages.txt
     1090  2013-09-09 09:43   EGG-INFO/SOURCES.txt
        1  2013-09-09 09:43   EGG-INFO/zip-safe
      219  2013-09-09 09:43   oslo/__init__.pyc
      707  2013-03-12 23:33   oslo/__init__.py
      139  2013-09-09 09:43   oslo/config/__init__.pyc
      650  2013-03-12 23:33   oslo/config/__init__.py
    68210  2013-09-09 09:43   oslo/config/cfg.pyc
    61009  2013-03-12 23:33   oslo/config/cfg.py
     4679  2013-09-09 09:43   oslo/config/iniparser.pyc
     4246  2013-03-12 23:33   oslo/config/iniparser.py
    當egg包是一個目錄時,它的結構也是一樣的,只是未壓縮。

    注意它與一般的包相比,多了一個EGG-INFO目錄,這個目錄就存放了該包的元數據。


egg包的使用

   不要以爲直接把egg包放到dist-packge中就可以import了,使用egg包有三種方法:

  1. 將egg包的絕對路徑添加到sys.path中,這個必須在代碼中執行,而且不能解決egg包依賴問題,需要手動與添加;
  2. 將egg包放到dist-packges(可以是sys.path中任何一目錄),在代碼添加如下兩行,即可使用,能自動添加依賴包:
    from pkg_resources import require
    require("FooBar>=1.2")
    
  3. 將egg包放到dist-packges(可以是sys.path中任何一目錄),在easy-install.pth中添加egg包名。當python啓動時,自動將該egg包及其依賴添加到sys.path中。

參考文獻:

http://peak.telecommunity.com/DevCenter/PythonEggs





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