跳转到主要内容

Setuptools扩展,用于发布egg

项目描述

有关任何错误或功能请求的报告: http://trac.ingeniweb.com

什么是iw.releaser ?

iw.releaser提供了命令行工具,以便更容易发布和部署基于zc.buildout/subversion的项目。

它提供了

  • 新的setuptools命令

  • release:用于发布基于egg的包

  • build_mo:用于搜索和编译.po文件

  • 控制台脚本

  • project_release:用于发布基于buildout的项目

  • project_deploy:用于部署基于buildout的项目

  • project_copy_eggs:用于收集项目中使用的所有egg

  • project_md5:用于计算buildout项目的MD5哈希值

  • 一个钩子,可以在发布包时执行操作,默认钩子会在每次发布时发送电子邮件。

  • 一个paste模板,用于创建项目结构

如何安装iw.releaser ?

要安装iw.releaser,只需运行easy_install

$ easy_install iw.releaser

或者如果您已下载,可以启动其setup

$ python setup.py install

如何使用iw.releaser ?

要与iw.releaser一起工作,让我们通过一个小教程来学习如何创建基于buildout的项目。这需要几个步骤

  • 设置你的环境

  • 创建项目结构

  • 创建基于egg的包

  • 发布egg

  • 发布buildout

  • 升级现有的buildout

设置你的环境

要顺利使用zc.buildout,首先需要在你的环境中设置一些事情,以确保你可以运行所有类型的基于buildout的应用程序。

在你的家目录中放入两个文件

  • HOME/.buildout/.httpauth:该文件将包含系统尝试访问受密码保护的 http 资源(如 svn 或私有网站)时的认证信息。它是一个文本文件,其中每一行是:领域,url,用户,密码

    例如

    trac,https://svn.ingeniweb.com,user,password
    pypi,http://products.ingeniweb.com,user,password

    这被 lovely.buildouthttp 使用。

  • HOME/.buildout/default.cfg:该文件设置了一些默认值,因此 zc.buildout 可以缓存和节省下载的 eggs。

    例如

    [buildout]
    
    download-cache = /home/tarek/.buildout/downloads
    eggs-directory = /home/tarek/.buildout/eggs

接下来,您需要确保可以将 eggs 发布到多个目标,因为一些私有 eggs 不应该发布到 cheeseshop。在这种情况下,唯一提供与 Cheeseshop 相同网络服务的软件是 Plone 软件中心 >= 1.5。

为了能够处理多个类似 cheeseshop 的服务器,我们需要安装一个小插件,称为 iw.dist

$ easy_install iw.dist

这允许您在 .pypirc 中定义多个服务器。例如,如果您正在与一个私有类似 cheeseshop 的服务器一起工作,您可以在 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. 开头的 eggs 推送到 Pypi,以及所有以 iw. 开头的 eggs 推送到 ingeniweb-public。用于推送包的命令由 command 定义。

创建项目结构

每个项目都必须以相同的方式进行结构化

$ paster create -t iw_plone_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 的版本

此结构必须提交到您的 subversion

$ svn import my_project http://some.svn/my_project -m "initial commit"

然后您就可以在 buildout 中工作了。

创建基于egg的包

从那里,您可以通过将它们放入 packages 文件夹,使用 ZopeSkel 中可用的任何模板,将一些包添加到项目中。

但请注意,在包中使用 trunk/tags/branches,每个项目都要有一个

$ cd my_projet/packages
$ paster create -t plone plone.example
$ mv plone.example trunk
$ mkdir plone.example
$ mv trunk plone.example/
$ mkdir plone.example/tags plone.example/branches
$ svn add plone.example
$ svn ci -m "initial import of  plone.example"

不要使用 trunk 作为包名与 paster 一起使用,因为这将在包中生成不良元数据

可以在 setup.cfg 中添加一个特殊部分,以便在每次发布包时发送邮件

[mail_hook]
hook = iw.releaser:mail
from = support@ingeniweb.com
emails =
     trac@lists.ingeniweb.com

如果您的系统没有 SMTP 服务器,您需要在 mail_hook 部分中添加 SMTP 服务器的名称及其端口号到您的 .pypirc 文件中

[mail_hook]
host = smtp.neuf.fr
port = 25

从那里,您可以将包绑定到您的 buildout 上,通过在 my_project/buildout 文件夹中使用 develop 变量

[buildout]
...
develop=
    .../packages/monprojet.reports/trunk

bundle 文件夹也可以用来设置 svn:externals,以便在 buildout 中工作更简单。

发布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 中创建分支和标签

  • 将包推送到各种类似 cheeseshop 的服务器

  • 如果 setup.cfg 中提供了 mail_hook 部分,发送带有更改的邮件

发布项目

发布项目由调用 project_release 然后 project_deploy 组成。

project_release 将仅创建 subversion 中的新分支

$ cd my_project/buildout
$ project_release
What version you are releasing ? 0.1
Added version file.

这将把 my_project/buildout 复制到 my_project/releases/0.1 下的子版本库中。然后你可以在这个版本中工作,以确定 buildout 中的版本。一个良好的做法是为部署创建一个专门的 cfg 文件。

下一步是使用 project_deploy 生成一个压缩包。

$ cd /tmp
$ svn co http://somesvn/my_projet/releases/0.1 my_project
$ cd my_project
$ project_deploy prod.cfg

这将使用虚拟环境在 /tmp 中构建一个压缩包,并设置一切,以便这个 buildout 可以使用这个归档在任何地方离线重新安装。

因此,结果可以用以下两行安装

$ python boostrap.py
$ bin/buildout

升级现有的buildout

要升级现有的 buildout,你可以使用 project_eggs 命令。它将创建一个包含运行项目所需的所有 eggs 和 .cfg 文件的压缩包。

在你的 buildout 中运行它,通过指定 .cfg 文件并提供归档的名称

$ project_eggs buildout.cfg /tmp/upgrade.tgz

你甚至可以提供一个过滤器来收集具有 glob 样式名称的特定包,用逗号分隔

$ project_eggs buildout.cfg /tmp/upgrade.tgz "iw.*,plone.*"

这个过滤器将仅获取以 iw.plone. 开头的 eggs。当你只更改了几个 eggs,并且想要减小升级时压缩包的大小,这很有用。

升级操作将包括调用

$ cp upgrade.tgz my_project/
$ cd my_project
$ tar -xzvf upgrade.tgz
$ bin/buildout

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

iw.releaser-0.4.1.tar.gz (76.8 kB 查看哈希值)

上传时间

构建分布

iw.releaser-0.4.1-py2.4.egg (161.1 kB 查看哈希值)

上传时间

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面