在之前学习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

python pbr 打包的更多相关文章

  1. 将自己写的Python代码打包放到PyPI上

    如果是开源的Python代码,为了能够让大家更方便的使用,放到PyPI上也许是个非常不错的主意(PyPI:Python Package Index).刚开始我以为要将代码打包放到PyPI上是一件非常复 ...

  2. python进阶--打包为exe文件

    一.Python打包为EXE文件有不少方案,比较常用的有下面两种方式: 1.使用py2exe 详细介绍:http://www.cnblogs.com/jans2002/archive/2006/09/ ...

  3. 利用pyinstaller将python脚本打包发布

    之前写了一个小工具,将excel配置表转换为json.xml.lua等配置文件.最近在学习egret,正好需要转换配置文件,刚好就用上了.然而当我想把工具拷到工作目录时,就发愁了.之前我为了方便扩展, ...

  4. Python:使用Kivy将python程序打包为apk文件

    1.概述 Kivy是一套Python下的跨平台开源应用开发框架,官网,我们可以用 它来将Python程序打包为安卓的apk安装文件.以下是在windows环境中使用. 安装和配置的过程中会下载很多东西 ...

  5. 将Python程序打包为exe方法

    将Python程序打包为exe文件,需要使用到的工具是pyinstaller pyinstaller是一个多平台的Python程序打包为exe的免费工具 安装pyinstaller: 1,在Windo ...

  6. 将Python 程序打包成 .exe格式入门

    PyInstaller PyInstaller 是一个十分有用的第三方库,可以用来打包 python 应用程序,打包完的程序就可以在没有安装 Python 解释器的机器上运行了. 它能够在 Windo ...

  7. 将Python脚本打包成可执行文件

    Python是一个脚本语言,被解释器解释执行.它的发布方式: .py文件:对于开源项目或者源码没那么重要的,直接提供源码,需要使用者自行安装Python并且安装依赖的各种库.(Python官方的各种安 ...

  8. 将python代码打包成一个app/exe

    前言 打包的代码通常都需要写一个简单的界面,一般用PyQt来写.用PyQt写界面的方法请戳这里:PyQt5的安装及基本配置    PyQt5教程 python提供了几个用来打包的模块,主要有py2ap ...

  9. [转]Python依赖打包发布详细

    Python依赖打包发布详细   http://www.cnblogs.com/mywolrd/p/4756005.html 将Python脚本打包成可执行文件   Python是一个脚本语言,被解释 ...

随机推荐

  1. 遇到的问题&思考

    MYSQL需要批量修改表前缀: http://jingyan.baidu.com/article/11c17a2c742561f446e39d2f.html Select CONCAT( 'ALTER ...

  2. <转载> FreeNAS的安装和简单配置 http://freenas.cn/?p=342

    前些日子在公司搭了一个模拟生产环境的平台.由于是测试环境,资源有限只能使用虚拟机实现,所以存储这块就想到了使用FreeNAS.很早以前玩儿过几次,当时是生产环境需要上存储设备,经过对比还是选择的更可靠 ...

  3. ClassNotFoundException: javax.validation.ValidatorFactory

    spring mvc 程序. 浏览器一访问controller 则出现: ClassNotFoundException: javax.validation.ValidatorFactory ... 很 ...

  4. UEditor 在ie中报console未定义解决方案

    解决办法:                  1.注释掉该代码               2.或者加入如下代码即可,本人已经测试过,没有问题. window.console = window.con ...

  5. nginx配置资源缓存

    缓存nginx服务器的静态文件.如css,js,htm,html,jpg,gif,png,flv,swf,这些文件都不是经常更新.便于缓存以减轻服务器的压力. 打开配置文件/usr/local/ngi ...

  6. git fail to push some refs....

    出现错误的主要原因是github中的README.md文件不在本地代码目录中 可以通过如下命令进行代码合并[注:pull=fetch+merge] git pull --rebase origin m ...

  7. sql 日期格式

    select CONVERT(varchar(10), getDate(),121) --不要时间2002-01-01 select CONVERT(varchar(10), getDate(),12 ...

  8. 我要重新开始学习C++了!

    C++实在是博大精深!之前总不想读厚厚的C++ Primer. 然而,现在的水平真的只是初学者!只是因为写的代码太简单,所以没有用到一些特性.可以说还是门外汉! 写笔记!

  9. h5 图片生成

    createImg(store, data) { let timer = setTimeout(function (params) { let _canvas = document.querySele ...

  10. epoll_wait 时 POLLERR 与 POLLIN 同时返回的现象解析(转)

    今天code review时,同事B对我代码中的poll()的处理做法提出了异议.于是做了些研究,还发现了一些好玩的故事. 异议的代码 我的代码是参考manpage写的,类似下面的做法.同事B说没有处 ...