从tar包安装egg并创建该egg。
项目描述
变更历史
0.4.3 (2009-09-15)
停止使用zc.buildout内部的API来检索版本信息。这修复了与最新buildout版本的冲突。
0.4.2 (2009-06-09)
使自动化测试在运行bin/test时正常工作。
修复了Windows问题:在安装过程中,有时在Windows上无法删除临时目录/文件。现在将发出警告,然后继续处理。此修复由Ben Dadsetan提供。 https://bugs.launchpad.net/grok/+bug/362833
修复了重复输出行的另一个问题。https://bugs.launchpad.net/grok/+bug/321178
当在 buildout.cfg 或用户家目录中的 .buildout/default.cfg 中设置了下载缓存时,将那里下载的 tarball 下载并不要丢弃。
- 修复了 urllib 模块中与 Windows 交互的问题。
修复了在 Mac 上不尊重预期输出顺序的 doctest 小问题。
0.4.1 (2009-01-12)
修复了 Windows 上的临时目录删除错误(修复使代码对其他系统也更加稳健)。修复了 https://bugs.launchpad.net/grok/+bug/315227
Windows 兼容性修复:使用 'wb' 进行写入,以便在 Windows 上成功下载 egg tarball。
0.4.0 (2008-09-22)
当下载失败时,不要说“继续使用 buildout”,因为下载器会立即退出,如果需要的话,调用代码或用户可以继续 buildout。[maurits]
当从 tarball 安装需求时,如果需求不能仅通过 tarball 满足,现在我们将查看默认索引(通常是 python cheese shop)。这不应该发生,但它确实发生了。[maurits]
0.3.1 (2008-07-13)
消除了令人烦恼的“basket 的未使用选项:url”警告。
0.3.0 (2008-05-30)
现在在创建 tarball 时也下载额外的特定于 Windows 的 eggs,只要它们在 cheese shop 上。[maurits]
0.2.0 (2008-05-22)
使用 z3c.recipe.eggbasket:creator 菜谱创建围绕 create_source_tarball 函数的脚本。暂时从 setup.py 中删除了 releasemaker 控制台脚本,因为它尚未处理命令行参数。[maurits]
添加了 create_source_tarball 函数,用于创建我们期望的源 tarball。releasemaker 控制台脚本调用此函数。[maurits]
0.1.0 (2008-05-06)
添加了测试。[maurits]
初始实现。[maurits, timte]
使用 ZopeSkel 创建了菜谱。[Grok 团队]
详细文档
本菜谱的目标
你有一个 egg(例如 grok),它有很多依赖。它依赖的其他 eggs 在 cheeseshop、sourceforge 和一些其他服务器上找到。即使这些服务器中的任何一个出现故障,其他人(或你自己)也无法安装该 egg。或者,也许你的 egg 依赖于另一个 egg 的特定版本,而该版本由于某些原因从 cheeseshop 中删除。
换句话说:存在多个故障点。感兴趣的用户想尝试你的 egg,但安装失败,因为服务器故障,他们感到失望,离开并再也不回来了。
本菜谱的目标是避免这些多个故障点。你创建一个包含所有依赖 eggs 的 tarball。像 zc.sourcerelease 这样的包可以在这里有所帮助,但我们的菜谱也可以创建这样的 tar ball。将其包含在如下 buildout 中
[buildout] parts = bundlemaker [bundlemaker] recipe = z3c.recipe.eggbasket:creator egg = grok versionfile = http://grok.zope.org/releaseinfo/grok-0.12.cfg
在制作完该 tarball 之后,你需要将其上传到某个地方。在你的 buildout 中,将该菜谱指向你的 egg 和 tarball 的 URL,例如这样
[buildout] parts = eggbasket [eggbasket] recipe = z3c.recipe.eggbasket eggs = grok url = http://grok.zope.org/releaseinfo/grok-eggs-0.12.tgz
使用此菜谱的部分通常应排在第一位。该菜谱所做的操作是仅使用该 tarball 中找到的 eggs 安装你的 egg 和所有其依赖项。之后,你可以让 buildout 的其余部分继续工作。
限制
这种方法仍然让你存在多个故障点
cheeseshop 必须在线,以便最终用户可以安装此菜谱
你的 tarball 所在的服务器必须在线。
在 buildout 调用此食谱的 install 方法进行实际工作之前,所有 buildout 部件都已初始化。这意味着所有食谱使用的 eggs 和依赖项都已安装。这可能已经涉及很多 eggs 和多个故障点。解决方案:您可以首先显式安装使用此食谱的部件。所以,对于上面的 buildout 片段,将是
bin/buildout install eggbasket
支持选项
该食谱支持以下选项
- eggs
一个或多个您想要与 tarball 一起安装的 eggs。
- url
我们获取包含提到的 eggs 及其依赖项的 tarball 的 URL。
releasemaker 脚本支持以下选项
- egg
我们想要捆绑在一起以及其依赖项的主要 egg。这是必需的。
- versionfile
包含主要 egg 及其依赖项所需版本的配置文件。例如,grok 版本文件:http://grok.zope.org/releaseinfo/grok-0.12.cfg。此文件由 zc.buildout 解析,因此您可以通过扩展其他文件。文件可以是 URL 或当前目录中的文件名。
示例用法
我们有一个名为 orange 的包,它依赖于名为 colour 的包
>>> import os.path >>> import z3c.recipe.eggbasket.tests as testdir >>> orange = os.path.join(os.path.dirname(testdir.__file__), 'orange') >>> colour = os.path.join(os.path.dirname(testdir.__file__), 'colour')
我们在一个目录中为它们创建源分布
>>> colours = tmpdir('colours') >>> sdist(colour, colours) >>> sdist(orange, colours) >>> ls(colours) - colour-0.1.zip - orange-0.1.zip
我们将定义一个使用此食谱的 buildout 模板
>>> buildout_template = """ ... [buildout] ... index = http://pypi.python.org/simple ... parts = basket ... ... [basket] ... recipe = z3c.recipe.eggbasket ... eggs = %(eggs)s ... url = %(url)s ... """
我们首先创建一个不指定 egg 的 buildout
>>> write('buildout.cfg', buildout_template % { 'eggs': '', 'url' : 'http://nowhere'})
在这种情况下,该食谱将不执行任何操作。因此,不使用 URL。运行 buildout 给我们
>>> print 'start..\n', system(buildout) start.. ... Installing basket. <BLANKLINE>
接下来,我们将指定一个 egg,但引用一个错误的 URL
>>> write('buildout.cfg', buildout_template % { 'eggs': 'orange', 'url' : 'http://nowhere'}) >>> print system(buildout) Uninstalling basket. Installing basket. Couldn't find index page for 'orange' (maybe misspelled?) Getting distribution for 'orange'. eggbasket: Not all distributions are installed. A tarball will be downloaded. eggbasket: Downloading http://nowhere ... eggbasket: Url not found: http://nowhere. <BLANKLINE>
因此,现在我们创建一个目录中的 tar 包
>>> import tarfile >>> tarserver = tmpdir('tarserver') >>> cd(tarserver) >>> tarball = tarfile.open('colours.tgz', 'w:gz') >>> tarball.add(colours)
注意:下一个列表的顺序没有保证,因此这里可能有测试失败
>>> tarball.list(verbose=False) tmp/tmpDlQSIQbuildoutSetUp/_TEST_/colours/ tmp/tmpDlQSIQbuildoutSetUp/_TEST_/colours/colour-0.1.zip tmp/tmpDlQSIQbuildoutSetUp/_TEST_/colours/orange-0.1.zip>>> tarball.close() >>> ls(tarserver) - colours.tgz
我们将其放在一个 URL 上并在我们的 buildout 中使用它
>>> cd(sample_buildout) >>> tarball_url = 'file://' + tarserver + '/colours.tgz' >>> write('buildout.cfg', buildout_template % { 'eggs': 'orange', 'url' : tarball_url}) >>> print system(buildout) Uninstalling basket. Installing basket. Couldn't find index page for 'orange' (maybe misspelled?) Getting distribution for 'orange'. eggbasket: Not all distributions are installed. A tarball will be downloaded. eggbasket: Downloading /tarserver/colours.tgz ... eggbasket: Finished downloading. eggbasket: Extracting tarball contents... eggbasket: Installing eggs to /sample-buildout/eggs which will take a while... Getting distribution for 'orange'. Got orange 0.1. Getting distribution for 'colour'. Got colour 0.1. <BLANKLINE>
贡献者
Grok 团队
Maurits van Rees Tim Terlegard
下载
项目详情
z3c.recipe.eggbasket-0.4.3.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2f8fd3de2b614ee6e1a8a7ea3ee57372d1e7133a1aa256858877cd851c2cc50d |
|
MD5 | f3afab7e7557c01aa403baafec102c03 |
|
BLAKE2b-256 | dd6c622d9ed6653e1b2d679cea5c8b11e645d5e9771456cd21e1a22996fabeb8 |