跳转到主要内容

ZC Buildout配置/构建/构建安装的配方

项目描述

通过configure/make/make install安装下载的配方

configure-make-make-install配方自动将基于configure的源代码分布安装到buildouts中。

选项

url

要下载的源存档的URL

configure-command

configure脚本的名称。

默认值为./configure

configure-options

基本的configure选项。

默认为指向部分目录的--prefix选项。

extra_options

要传递给configure的额外选项字符串(除了基本选项之外)。

environment

可选的NAME=VALUE格式的环境变量设置。

换行符将被忽略。只要它们不会被误认为是环境设置,就可以在环境值中包含空格。

environment = FOO=bar
              baz

设置环境变量FOO,但

environment = FOO=bar xxx=baz

设置2个环境值,FOO和xxx。

patch

应用于分布的可选补丁文件的名称。

patch_options

如果使用补丁文件,提供给补丁命令的选项。

默认为 -p0

共享

在构建点之间共享构建。

autogen

运行以生成配置脚本的脚本的名称。

source-directory-contains

在发行版源目录中的文件名。

该配置用于确定是否已找到源目录。默认为“configure”。

发布历史

4.0 (2023-07-07)

  • 放弃对Python 2.7、3.5、3.6的支持。

  • 添加对Python 3.9、3.10、3.11的支持。

3.0.0 (2019-03-30)

  • 放弃对Python 3.4的支持。

  • 添加对Python 3.7和3.8a2的支持。

  • 使用Flake8对代码进行检查。

2.0.0 (2017-06-21)

  • 添加对Python 3.4、3.5、3.6和PyPy的支持。

  • 在Travis CI上启用了自动化测试。

1.3.6 (2014-04-14)

  • 修复:错误地使用“is not ‘’”而不是“!=”比较字符串。

  • 修复:安装位置不允许有空格。

1.3.5 (2011-08-06)

  • 修复:环境变量不允许有空格。

  • 修复:添加了缺失的选项参考文档。

1.3.4 (2011-01-18)

  • 修复了一个在位置记录中导致的错误,该错误会导致当某个部分不再需要共享构建时从磁盘删除共享构建。 (#695977)

  • 使测试通过zc.buildout 1.4和1.5,提高了zc.buildout的上限版本。 (#695732)

1.3.3 (2010-11-10)

  • 当cmmi成功时删除临时构建目录。

  • 指定zc.buildout版本为 <1.5.0b1,因为当前配置不兼容zc.buildout 1.5。

1.3.2 (2010-08-09)

  • 当无法下载源时,删除共享构建的构建目录。

  • 声明对zope.testing的测试依赖。

1.3.1 (2009-09-10)

  • 声明对zc.buildout 1.4或更高版本的依赖。此依赖自1.3版本引入。

1.3 (2009-09-03)

  • 使用zc.buildout的下载API。由于这允许MD5检查,因此添加了md5sum和patch-md5sum选项。

  • 添加了更改配置脚本名称和覆盖--prefix参数的选项。

  • 将核心“configure; make; make install”命令序列移动到可以在其他配置中重写的方法,以支持安装过程略有不同的包。

1.2.1 (2009-08-12)

错误修复:跟踪重用的共享构建。

1.2.0 (2009-05-18)

启用了使用完成构建的共享目录。

1.1.6 (2009-03-17)

将‘zc’包从检出根目录移到‘src’,以防止测试运行器找到buildout本地安装的eggs。

删除了Python 2.6下的弃用项。

1.1.5 (2008-11-07)

  • 在README.txt文件中添加了对SVN仓库的链接,以便当请求安装zc.recipe.cmmi的“-dev”版本时,Setuptools可以自动找到开发版本。

  • 应用了对错误#261367的修复,即更改正在下载的文件的open()为二进制,因此Windows下不再出现如下错误。

    uncompress = self.decompress.decompress(buf)错误:解压缩错误-3:距离太远

1.1.4 (2008-06-25)

添加了对autogen配置文件的支持。

1.1.3 (2008-06-03)

添加了对更新环境的支持。

1.1.2 (2008-02-28)

  • 在创建之前检查location文件夹是否存在。

1.1.0之后

添加了从url下载补丁的支持,而不是仅使用文件系统上的补丁。

1.1.0

添加了对

  • download-cache:下载的文件在缓存缓存中的“cmmi”子目录中缓存,缓存密钥是文件的下载url的散列,缓存信息记录在每个目录内的cache.ini文件中

  • 离线模式:如果包不在缓存中,cmmi不会上线

  • 变量位置:如果需要,除了部分目录之外的构建文件

  • 额外的日志/输出

1.0.2 (2007-06-03)

  • 添加了对补丁的支持。

  • 测试修复(buildout的输出已更改)

1.0.1 (2006-11-22)

  • 添加了缺失的zip_safe标志。

1.0 (2006-11-22)

初始发布。

详细文档

我们有一个包含演示foo tar包的存档,并通过http发布,以便查看离线效果

>>> ls(distros)
-  bar.tgz
-  baz.tgz
-  foo.tgz
>>> distros_url = start_server(distros)

让我们更新一个示例构建,以便安装它

>>> write('buildout.cfg',
... """
... [buildout]
... parts = foo
...
... [foo]
... recipe = zc.recipe.cmmi
... url = %sfoo.tgz
... """ % distros_url)

我们使用url选项来指定存档的位置。

如果我们运行构建,存档中的配置脚本将被执行。它创建一个make文件,该文件也将被执行

>>> print(system('bin/buildout').strip())
Installing foo.
foo: Downloading https://#/foo.tgz
foo: Unpacking and configuring
configuring foo --prefix=/sample-buildout/parts/foo
echo building foo
building foo
echo installing foo
installing foo

配方还创建了部分目录

>>> import os.path
>>> os.path.isdir(join(sample_buildout, "parts", "foo"))
True

如果我们再次运行构建,将调用更新方法,但它不会做任何事情

>>> print(system('bin/buildout').strip())
Updating foo.

您可以提供额外的配置选项

>>> write('buildout.cfg',
... """
... [buildout]
... parts = foo
...
... [foo]
... recipe = zc.recipe.cmmi
... url = %sfoo.tgz
... extra_options = -a -b c
... """ % distros_url)
>>> print(system('bin/buildout').strip())
Uninstalling foo.
Installing foo.
foo: Downloading https://#/foo.tgz
foo: Unpacking and configuring
configuring foo --prefix=/sample-buildout/parts/foo -a -b c
echo building foo
building foo
echo installing foo
installing foo

配方将位置选项设置为部分安装的位置,该选项可以被其他配方读取

>>> cat('.installed.cfg')
[buildout]
installed_develop_eggs =
parts = foo
<BLANKLINE>
[foo]
    ...
location = /sample_buildout/parts/foo
    ...

在运行配置或make时,可能需要设置一些环境变量。这可以通过添加环境语句来完成

>>> write('buildout.cfg',
... """
... [buildout]
... parts = foo
...
... [foo]
... recipe = zc.recipe.cmmi
... url = %sfoo.tgz
... environment =
...   CFLAGS=-I/usr/lib/postgresql7.4/include
... """ % distros_url)
>>> print(system('bin/buildout').strip())
Uninstalling foo.
Installing foo.
foo: Downloading https://#/foo.tgz
foo: Unpacking and configuring
foo: Updating environment: CFLAGS=-I/usr/lib/postgresql7.4/include
configuring foo --prefix=/sample_buildout/parts/foo
echo building foo
building foo
echo installing foo
installing foo

在构建软件包之前,有时需要修补源代码。您可以指定要应用的补丁名称和(可选)补丁选项

首先,让我们编写一个补丁文件

>>> import sys
>>> mkdir('patches')
>>> write('patches/config.patch',
... """--- configure
... +++ /dev/null
... @@ -1,13 +1,13 @@
...  #!%s
...  import sys
... -print("configuring foo " + ' '.join(sys.argv[1:]))
... +print("configuring foo patched " + ' '.join(sys.argv[1:]))
...
...  Makefile_template = '''
...  all:
... -\techo building foo
... +\techo building foo patched
...
...  install:
... -\techo installing foo
... +\techo installing foo patched
...  '''
...
...  with open('Makefile', 'w') as f:
...      _ = f.write(Makefile_template)
...
... """ % sys.executable)

现在,让我们创建一个buildout.cfg文件。注意:如果没有传递补丁选项,默认会追加-p0。

>>> write('buildout.cfg',
... """
... [buildout]
... parts = foo
...
... [foo]
... recipe = zc.recipe.cmmi
... url = %sfoo.tgz
... patch = ${buildout:directory}/patches/config.patch
... patch_options = -p0
... """ % distros_url)
>>> print(system('bin/buildout').strip())
Uninstalling foo.
Installing foo.
foo: Downloading https://#/foo.tgz
foo: Unpacking and configuring
patching file configure
...
configuring foo patched --prefix=/sample_buildout/parts/foo
echo building foo patched
building foo patched
echo installing foo patched
installing foo patched

可以自动生成配置文件

>>> write('buildout.cfg',
... """
... [buildout]
... parts = foo
...
... [foo]
... recipe = zc.recipe.cmmi
... url = %s/bar.tgz
... autogen = autogen.sh
... """ % distros_url)
>>> print(system('bin/buildout').strip())
Uninstalling foo.
Installing foo.
foo: Downloading https://#//bar.tgz
foo: Unpacking and configuring
foo: auto generating configure files
configuring foo --prefix=/sample_buildout/parts/foo
echo building foo
building foo
echo installing foo
installing foo

还可以支持除“./configure”之外的其他配置命令

>>> write('buildout.cfg',
... """
... [buildout]
... parts = foo
...
... [foo]
... recipe = zc.recipe.cmmi
... url = %s/baz.tgz
... source-directory-contains = configure.py
... configure-command = ./configure.py
... configure-options =
...     --bindir=bin
... """ % distros_url)
>>> print(system('bin/buildout').strip())
Uninstalling foo.
Installing foo.
foo: Downloading https://#//baz.tgz
foo: Unpacking and configuring
configuring foo --bindir=bin
echo building foo
building foo
echo installing foo
installing foo

在下载源存档或补丁时,我们可以通过提供必须匹配的MD5校验和来选择性地确保其真实性。如果匹配,buildout的输出将不会打扰我们

>>> from hashlib import md5
>>> with open(join(distros, 'foo.tgz'), 'rb') as f:
...     foo_md5sum = md5(f.read()).hexdigest()
>>> write('buildout.cfg',
... """
... [buildout]
... parts = foo
...
... [foo]
... recipe = zc.recipe.cmmi
... url = %sfoo.tgz
... md5sum = %s
... """ % (distros_url, foo_md5sum))
>>> print(system('bin/buildout').strip())
Uninstalling foo.
Installing foo.
foo: Downloading https://#/foo.tgz
foo: Unpacking and configuring
configuring foo --prefix=/sample_buildout/parts/foo
echo building foo
building foo
echo installing foo
installing foo

但如果存档不匹配校验和,配方将拒绝安装

>>> write('buildout.cfg',
... """
... [buildout]
... parts = foo
...
... [foo]
... recipe = zc.recipe.cmmi
... url = %sbar.tgz
... md5sum = %s
... patch = ${buildout:directory}/patches/config.patch
... """ % (distros_url, foo_md5sum))
>>> print(system('bin/buildout').strip())
Uninstalling foo.
Installing foo.
foo: Downloading https://#:20617/bar.tgz
While:
  Installing foo.
Error: MD5 checksum mismatch downloading 'https://#/bar.tgz'

类似地,补丁的校验和不匹配将导致构建运行中断

>>> write('buildout.cfg',
... """
... [buildout]
... parts = foo
...
... [foo]
... recipe = zc.recipe.cmmi
... url = %sfoo.tgz
... patch = ${buildout:directory}/patches/config.patch
... patch-md5sum = %s
... """ % (distros_url, foo_md5sum))
>>> print(system('bin/buildout').strip())
Installing foo.
foo: Downloading https://#:21669/foo.tgz
foo: Unpacking and configuring
While:
  Installing foo.
Error: MD5 checksum mismatch for local resource at '/.../sample-buildout/patches/config.patch'.
>>> write('buildout.cfg',
... """
... [buildout]
... parts = foo
...
... [foo]
... recipe = zc.recipe.cmmi
... url = %sfoo.tgz
... patch = ${buildout:directory}/patches/config.patch
... """ % (distros_url))

如果构建失败,将记录tarball解压缩的临时目录到stdout,并保持不变以供调试目的

>>> write('patches/config.patch', "dgdgdfgdfg")
>>> res =  system('bin/buildout')
>>> print(res)
Installing foo.
foo: Downloading https://#/foo.tgz
foo: Unpacking and configuring
patch unexpectedly ends in middle of line
foo: cmmi failed: /.../...buildout-foo
patch: **** Only garbage was found in the patch input.
While:
  Installing foo.
<BLANKLINE>
An internal error occurred due to a bug in either zc.buildout or in a
recipe being used:
...
subprocess.CalledProcessError: Command 'patch -p0 < ...' returned non-zero exit status ...
<BLANKLINE>
>>> import re
>>> import os.path
>>> import shutil
>>> path = re.search('foo: cmmi failed: (.*)', res).group(1)
>>> os.path.exists(path)
True
>>> shutil.rmtree(path)

成功构建后,将删除此类临时目录

>>> import glob
>>> import tempfile
>>> old_tempdir = tempfile.gettempdir()
>>> tempdir = tempfile.tempdir = tempfile.mkdtemp(suffix='.buildout.build')
>>> dirs = glob.glob(os.path.join(tempdir, '*buildout-foo'))
>>> write('buildout.cfg',
... """
... [buildout]
... parts = foo
...
... [foo]
... recipe = zc.recipe.cmmi
... url = %sfoo.tgz
... """ % (distros_url,))
>>> print(system("bin/buildout"))
Installing foo.
foo: Downloading https://#:21445/foo.tgz
foo: Unpacking and configuring
configuring foo --prefix=/sample_buildout/parts/foo
echo building foo
building foo
echo installing foo
installing foo
<BLANKLINE>
>>> new_dirs = glob.glob(os.path.join(tempdir, '*buildout-foo'))
>>> len(dirs) == len(new_dirs) == 0
True
>>> tempfile.tempdir = old_tempdir

下载缓存

配方支持使用与zc.buildout相同的下载缓存方式。有关详细信息,请参阅downloadcache.txt

项目详情


下载文件

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

源分发

zc.recipe.cmmi-4.0.tar.gz (23.4 kB 查看散列)

上传时间:

构建分发

zc.recipe.cmmi-4.0-py3-none-any.whl (21.9 kB 查看散列)

上传时间: Python 3

由以下支持