在以前學習stevedore時,在setup.py中使用setuptools打包發佈了代碼,而後調用代碼中的實例化對象。參考個人文章 https://www.cnblogs.com/CaesarLinsa/p/8571297.htmlhtml
今天使用更方便的方式,使用pbr。pbr是一個管理python setuptools 的工具庫,pbr模塊讀入setup.cfg文件的信息,而且給setuptools 中的setup hook 函數填寫默認參數,提供更加有意義的行爲。python
pbr只須要最小化的setup.py 文件,描述包的內容:linux
import setuptools setuptools.setup(setup_requires=['pbr'], pbr=True)
[metadata] #包信息 name = caesarlinsa # 包名 version = 1.0 # 版本 description-file = README.md #描述文件 author = caesar #做者 author-email = author@example.com # 做者郵箱 classifier = Intended Audience :: Developers # 功用,平臺等 Programming Language :: Python :: 2.7 # python 版本 [files] packages = caesar #包名 遞歸Python包層次結構並安裝,若是未指定packages,則默認爲[metadata]部分中給出的name字段的值。注意會根據__init__.py進行遞歸掃描
extra_files =
requirements.txt # 描述包依賴的pip源文件
[entry_points] # 模塊入口 caesar.metering.storage = mongodb = caesar.storage.impl_mongodb:Connection
console_scripts = # 可執行腳本,在linux上/usr/local/bin,在windows上在python的Scripts中生成。
caesar-api = Test.cmd.api:main
其中最感興趣的是[entry_points],由於能夠經過註冊功能模塊的方式,在一個包中引入不一樣的模塊,並使其相互調用。若是不使用這種方式,使用sys.path.append()引入自定義模塊,將很是複雜,而且很不pythonic。
在linux環境上發佈包並進行安裝,會默認部署在/usr/lib/python2.7/dist-packages/caesar目錄下,調用執行都OK。
可使用如下三種方式打包:
1 tar.gz格式:這個就是標準壓縮格式,裏面包含了項目元數據和代碼,使用python setup.py sdist命令生成。
2 .egg格式:本質上一個壓縮文件,擴展名換了,裏面也包含了項目元數據以及源代碼。能夠經過命令python setup.py bdist_egg命令生成。
3 .whl格式:這個是Wheel包,也是一個壓縮文件,只是擴展名換了,裏面也包含了項目元數據和代碼。能夠經過命令python setup.py bdist_wheel生成.
在windows環境上,安裝包後就能夠調用[entry_points]中的模塊,而不出現異常報錯。git
Eroor:github
1.當出現如下錯誤,請使用git init初始化倉庫mongodb
2.在包中注意setup.py和setup.conf放入最外面,好比包Test,須要和包在同一個級,不然打包中會不存在源代碼,調用失敗。正確作法以下:windows
安裝見下圖,egg文件與源文件複製到dist-packages下api
以上只是我的感悟,具體可參考個人github: https://github.com/CaesarLinsa/ceilometer_TestCaseapp