跳转到主要内容

从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 交互的问题。

    https://bugs.launchpad.net/grok/+bug/362833

  • 修复了在 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 的其余部分继续工作。

限制

  1. 这种方法仍然让你存在多个故障点

    • cheeseshop 必须在线,以便最终用户可以安装此菜谱

    • 你的 tarball 所在的服务器必须在线。

  2. 在 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 (14.5 kB 查看哈希)

上传时间

由以下支持

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