Setuptools扩展,用于发布egg
项目描述
有关任何错误或功能请求的反馈,请访问: http://trac.ingeniweb.com
什么是collective.releaser ?
collective.releaser 提供命令行工具,以简化基于 zc.buildout/subversion 的项目的发布和部署。
它提供以下功能:
新的 setuptools 命令
release:用于发布基于 egg 的包
build_mo:用于搜索和编译 .po 文件
控制台脚本
project_release:用于发布基于 buildout 的项目
project_deploy:用于部署基于 buildout 的项目
project_copy_eggs:用于收集项目中所使用的所有 egg
project_md5:用于计算 buildout 项目的 MD5 哈希值
package_svn_prepare:将新创建的包重新组织,使其准备好 svn 存储
一个钩子,能够在包发布时执行操作,默认情况下,每次发布都会发送电子邮件。
一个 paste 模板,用于创建项目结构,称为 releaser_project。
如何安装collective.releaser ?
要安装 collective.releaser,只需运行 easy_install
$ easy_install collective.releaser
或者如果您已下载,可以运行其 setup
$ python setup.py install
如何使用collective.releaser ?
要使用 collective.releaser,让我们通过一个小教程来学习如何创建基于 buildout 的项目。这个过程分为几个步骤:
设置环境
创建项目结构
创建基于 egg 的包
发布 egg
发布 buildout
升级现有 buildout
设置您的环境
要顺畅地使用 zc.buildout,首先需要在环境中设置一些适用于任何基于 Buildout 的应用程序的全局设置。
在您的家目录中放置两个文件
HOME/.buildout/.httpauth:此文件将包含系统尝试访问受密码保护的 http(s) 资源(如 svn 服务器或私人网站)时的认证信息。它是一个文本文件,其中每行是:realm,url,user,password
例如
trac,https://svn.ingeniweb.com,user,password pypi,http://products.ingeniweb.com,user,password
此文件被 lovely.buildouthttp 使用。
HOME/.buildout/default.cfg:此文件设置了一些默认值,以便 Buildout 可以缓存和节省下载的 egg。
例如
[buildout] download-cache = /home/tarek/.buildout/downloads eggs-directory = /home/tarek/.buildout/eggs
接下来,您需要确保可以将 egg 发布到多个目标,因为您可能希望某些私有 egg 不要发布到 PyPI。在此阶段,唯一提供与 PyPI 相同 Web 服务的软件是 Plone Software Center >= 1.5。
为了能够处理多个类似 PyPI 的服务器,我们需要安装一个名为 collective.dist 的小插件
$ easy_install collective.dist
这将允许您在 ~/.pypirc 文件中定义多个服务器。例如,如果您正在使用一个私有的类似 PyPI 的服务器,您可以在 HOME/.pypirc 中定义它如下:
[distutils] index-servers = pypi ingeniweb-public [pypi] username:ingeniweb password:secret [ingeniweb-public] repository:http://products.ingeniweb.com/catalog username:ingeniweb password:secret
最后,您需要定义发布策略配置,这将定义每个目标服务器上必须发布的包列表(正则表达式)以及与 setup.py 一起使用的命令序列。以下是一个默认示例,可以添加到您的 .pypirc 中,通过完成 release-command 和 release-packages 变量来完善部分:
... [ingeniweb-public] ... release-command = mregister sdist build_mo bdist_egg mupload release-packages = ^iw\..* [pypi] ... release-command = mregister sdist build_mo bdist_egg mupload release-packages = ^plone\..* ^collective\..*
这将推送所有以 plone. 或 collective. 开头的 egg 到 PyPI,并将所有以 iw. 开头的 egg 推送到 ingeniweb-public。推送包的命令由 command 定义。
创建项目结构
每个项目都必须以相同的方式进行结构化
$ paster create -t releaser_project my_project
这将询问您一些值
project_name:项目的名称
project_repo:subversion 仓库的根目录
一些可以保留为默认值的更多值。
这将生成 my_project 中的文件夹集
$ ls my_project ./buildout ./bundles ./docs ./packages ./releases
每个文件夹都有其作用
buildout:包含 buildout 配置文件
bundles:包含用于开发模式工作的包
docs:包含有关项目的文档
packages:包含基于 egg 的包
releases:包含 buildout 的发布版本
此结构必须在子版本控制系统中提交
$ svn import my_project http://some.svn/my_project -m "initial commit"
之后,您就可以在您的构建环境中工作了。
创建基于egg的包
从那里,您可以通过将它们放入 packages 文件夹,并使用 ZopeSkel 中的任何模板,将一些包添加到项目中。
不过请注意,每个项目都必须在包中使用 trunk/tags/branches 结构。
$ cd my_projet/packages $ paster create -t plone plone.example $ package_svn_prepare plone.example
最后一个命令只是执行以下操作
$ mv plone.example plone.example_md5_of_plone.example $ mkdir plone.example $ mkdir plone.example/tags plone.example/branches $ mv plone.example_md5_of_plone.example plone.example/trunk $ svn add plone.example $ svn ci -m "initial import of plone.example"
请勿在 paster 中使用 trunk 作为包名,因为这将在包中生成不良元数据。
可以在 setup.cfg 中添加一个特殊部分,以便在每次发布包时发送邮件
[mail_hook] hook = collective.releaser:mail from = support@ingeniweb.com emails = trac@lists.ingeniweb.com
如果您的系统没有 SMTP 服务器,您需要在您的 .pypirc 文件中添加 SMTP 服务器的名称及其端口号,在 mail_hook 部分中
[mail_hook] host = smtp.neuf.fr port = 25
从那里,您可以使用开发变量将包绑定到您的构建环境中,在您的 my_project/buildout 文件夹中
[buildout] ... develop= .../packages/monprojet.reports/trunk
同样,bundle 文件夹也可以用来设置 svn:externals,以便在构建环境中工作更加简单。
发布egg
通过在包中调用 release 来发布 eggs
$ python setup.py release running release This package is version 0.1.2 Do you want to run tests before releasing ? [y/N]: N Do you want to create the release ? If no, you will just be able to deploy again the current release [y/N]: Y Enter a version [0.1.2]: 0.1.2 Commiting changes... Creating branches... ...
这将处理以下操作
升级 setup.py 版本
在 svn 中创建分支和标签
将包推送到各种类似 PyPI 的服务器
如果 setup.cfg 中提供了 mail_hook 部分,将发送包含更改的邮件
如果要从非 svn 文件夹发布包,则使用此命令来禁用特定的 svn 钩子
$ python setup.py release --pre-hook --post-hook
您也可以使用一些参数来避免命令行提示
$ python setup.py release -a --version=0.1.3
发布项目
发布项目包括调用 project_release 然后调用 project_deploy。
project_release 只会在子版本控制中创建一个新的分支
$ cd my_project/buildout $ project_release --no-archive --version=0.1
这将把 my_project/buildout 复制到子版本控制中的 my_project/releases/0.1。然后您可以在这次发布中工作,以确定构建环境中的版本。一个好的做法是为部署创建一个专门的 cfg 文件。
下一步是使用 project_deploy 生成一个 tarball
$ cd /tmp $ svn co http://somesvn/my_projet/releases/0.1 my_project $ cd my_project $ project_deploy prod.cfg
这将使用 VirtualEnv 在 /tmp 中构建一个 tarball,并设置一切以便可以在任何离线位置使用此存档重新安装构建环境。
生成的发布可以通过两行命令安装
$ python boostrap.py $ bin/buildout
升级现有buildout
要升级现有的构建环境,您可以使用 project_release 命令。它将创建一个包含运行项目所需的全部 eggs 和 .cfg 文件的 tarball。
在您的构建环境中运行它,通过指向 .cfg 文件并提供一个存档的名称
$ cd my_project/buildout $ project_release --version=0.2
这将发布在 dev.cfg 中找到的所有开发 eggs。如果您的 dev.cfg 看起来像
[buildout] parts = eggs develop = ../my.package ../my.other [eggs] recipe = zc.recipe.egg eggs = my.package my.other
那么 my.package 和 my.other 将被发布,然后添加到包含所有 .cfg 文件的存档中。
如果您在 prod.cfg 中有一个静态版本
[buildout] parts = eggs versions = versions [versions] my.package = 0.1 [eggs] recipe = zc.recipe.egg eggs = my.package my.other
那么只有 my.other 将被发布,但两者都添加到存档中。
存档的默认配置文件(例如:buildout.cfg)将看起来像这样
[buildout] extends = prod.cfg versions = versions [versions] my.package=0.1 my.other=0.2
所以您可以直接在您的生产服务器上运行 ./bin/buildout 来使用正确的包版本。
0.7.1 (2010-12-08)
通过确保复制 distutils.cfg 文件来解决 mingw32 在虚拟环境中无法工作的问题。[deo]
0.7.0 (2010-09-30)
添加了一些修复,以使(大多数)测试在 Windows 上通过。[dreamcatcher]
解决了项目部署中损坏的目标文件问题。[dreamcatcher]
如果需要,则只升级 setuptools/zc.buildout。[deo]
添加了对 virtualenv 的依赖,而不是使用过时的版本,这可能会损害您的开发环境。[deo]
0.6.6 (2009-09-17)
确保在发布之前解析文件名以使用绝对路径。[gawel]
确保在发布之前我们的包在 sys.path 中。[gawel]
修复了 ReST 格式化问题。[gawel]
0.6.5 (2009-08-31)
修复了这里引入的 NameError(https://dev.plone.org/collective/changeset/85145/collective.releaser/branches/refactor/collective.releaser/project.py)[glenfant]
使测试微笑[glenfant]
0.6.4 (2009-08-18)
增加了更多文档和 sphinxifying 文档。[gawel]
0.6.3 (2009-08-18)
项目发布改进(见 http://www.gawel.org/weblog/en/2009/05/collective.releaser_rocks)[gawel]
移除了 long_description 检查器(现在属于 collective.dist)[tarek]
0.6.2 (2008-04-09)
确保 bootstrap.py 可以离线工作[tarek]
修复了 Django eggs 的 build_mo 命令[b_mathieu]
0.6.1 (2008-07-16)
添加了 buildbot 文件夹,包含预先生成的 collective.buildbot 环境[tarek]
所有 svn 提交消息前加上前缀[tarek]
更好的 tarball 命名[tarek]
引入了 glob 样式的选项,以便能够进行 glob 样式模式[tarek]
移除了分支创建[tarek]
0.6.0 (2008-07-16)
修复了 project_deploy,使其支持非 buildout.cfg 构建环境。感谢 Hans-Peter Locher 的反馈[tarek]
使用 Popen 读取元数据[tarek]
0.5.2 (2008-06-19)
现在检查 long_description 字段以确保其符合 reST 规范[tarek]
反向移植 Python 2.5 tarfile 模块[tarek]
修复了 #66[tarek]
0.5.1 (2008-06-10)
清空模板中的 parts 部分[tarek]
os.rename -> shutil.move[tarek]
在测试中添加 paster() 以简化测试[tarek]
当配方使用 subversion 时,修复 windows 下空或缺失的部分[encolpe]
0.5.0 (2008-05-21)
移动到 collective[tarek]
添加 package_svn_prepare 命令,以使用 trunk、tags 和 branches 重新构建新创建的包,并将其添加到当前工作副本中,然后将其作为“初始导入”提交到 svn。[mustapha]
0.4.1 (2008-04-29)
现在可以通过 .pypirc 驱动 release[carek]
我们不再从发布中删除 setup.cfg,因为它可以包含元素。我们只是移除了 dev 标签[tarek]
0.3.6 (2008-04-29)
编写了文档[tarek]
添加了 iw_plone_project 模板[tarek]
release 命令负责处理 version.txt(如果有)[gawel]
添加发布钩子[gawel]
0.3.5 (2008-04-22)
添加了 project_eggs 命令[tarek]
现在在发布的 tarball 中添加了 MD5 文件[tarek]
添加了 project_md5[tarek]
0.3.4 (2008-04-17)
添加了 project_copy_eggs[tarek]
0.3.3 (2008-04-17)
排除 Scripts、Lib 和 downloads/dist[tarek]
0.3.2 (2008-04-17)
保护 shutil.rmtree 调用[tarek]
使 python 提示符生成更智能[tarek]
默认情况下移除旧的字节码。(这意味着需要使用 –keepbytecode 才能使测试工作)[tarek]
0.3.0
修复了 os.curdir 的误用
修复了 build_mo(缩进错误)
通过添加垃圾文件修复了 over 简单的 build_mo 测试
0.2.9
修复了缺少的导入
0.2.8
从发布中移除了 parts、bin、lib 和其他文件夹。稍后我们将有一个特殊模式来提供它们,当需要预构建时。
修复了 project_diff 目标位置
0.2.7
现在有一个配置文件来针对 PyPI 服务器
project_release 无法与 svn:// 存储库一起工作
0.2.6
将 libpython*.a 文件复制到 buildout 的 libs 文件夹中,以便在 windows 下使用 MinGW 时虚拟环境工作。
在发布中添加了 version.txt 文件。
0.2.5
确保我们得到 virtualenv python2.4.*
清理 tarball 内容
确保 project_deploy 在同一文件夹中工作
0.2.4
移除了 project_release 中的额外问题
修复了发布名称
修复了检出
0.2.3
添加了 project_diff
0.2.2
确保虚拟环境(某些 win32 版本)与 Scripts/python 一起工作
0.2.1
确保虚拟环境与“python”或“python2.4”一起工作
包发布的自动模式不再启动测试
修复了 msgfmt 类型比较
0.2.0
确保使用 project_deploy 调用正确的 cfg 文件
0.1.9
为 setuptools 添加了 'build_mo' 命令
修复 project_release 相对路径
显式使用 ingeniweb-private 发布包
0.1.8
修复 CR/LF
0.1.7
修复多次上传
0.1.6
移除 eggchecker
0.1.5
确保我们不意外在不受欢迎的服务器上发布
0.1.4
修复了调用者
使用 virtualenv 在 project_deploy 步骤中隔离 egg
0.1.3
添加了命令行选项
0.1.2
确保下载缓存存在
在构建过程中添加了一个提交的快照文件
现在打包文件只能包含快照的差异
添加了iw.dist支持
0.1d
发布步骤不再是必须的
0.1c
移除了eggchecker依赖
0.1b
将发布模块重命名为包模块
实现了项目发布-r
0.1
由IngeniSkel创建的初始版本
项目详情
collective.releaser-0.7.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 10f6a969f8527acfc428c0f001ad025ba73884040dd72f557014ac64b8efe25e |
|
MD5 | de114c4b6805af55cc5d46f8d3bfa613 |
|
BLAKE2b-256 | 1a7904f6f17b63682e610c9ec798be84921c71119242631ecff5a486022a5084 |