跳转到主要内容

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-commandrelease-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.packagemy.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)

0.6.4 (2009-08-18)

  • 增加了更多文档和 sphinxifying 文档。[gawel]

0.6.3 (2009-08-18)

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 (96.1 kB 查看哈希值)

上传时间 源代码

由以下提供支持