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-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. 开头的 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
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。