python pbr 打包


在之前學習stevedore時,在setup.py中使用setuptools打包發布了代碼,然后調用代碼中的實例化對象。參考我的文章 https://www.cnblogs.com/CaesarLinsa/p/8571297.html

今天使用更方便的方式,使用pbr。pbr是一個管理python setuptools 的工具庫,pbr模塊讀入setup.cfg文件的信息,並且給setuptools 中的setup hook 函數填寫默認參數,提供更加有意義的行為。

pbr只需要最小化的setup.py 文件,描述包的內容:

import setuptools
setuptools.setup(setup_requires=['pbr'], pbr=True)
setup.py 所需的實際元數據存儲在setup.cfg中:
[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]中的模塊,而不出現異常報錯。

Eroor:

1.當出現以下錯誤,請使用git init初始化倉庫

2.在包中注意setup.py和setup.conf放入最外面,比如包Test,需要和包在同一個級,否則打包中會不存在源代碼,調用失敗。正確做法如下:

安裝見下圖,egg文件與源文件復制到dist-packages下

以上只是個人感悟,具體可參考我的github: https://github.com/CaesarLinsa/ceilometer_TestCase


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM