编译和安装源发行版的方法。

slapos.recipe.cmmi的Python项目详细描述


********************************************
编译和安装软件的方法内容:

recipe提供了使用"configure"和"make"等类似工具编译和安装源发行版的方法。它的灵感来自于
hexagonit.recipe.cmmi配方,但它提供了对构建过程的更多控制。


st,我们制造测试环境:




cd slapos.recipe.cmmi
wget http://downloads.buildout.org/2/bootstrap.py
wget http://svn.zope.org/*checkout*/zc.buildout/trunk/bootstrap/bootstrap.py

cat<;<;eof>;buildout.cfg
[buildout]
develop=.
parts=test
prefix=/tmp/test

[test]
recipe=zc.recipe.testrunner
egons=
slapos.recipe.cmmi[test]
eof

bin/buildout


::


/slapos.recipe.cmmi-0.2.tar.gz

::



repository:http://git.erp5.org/gitweb/slapos.recipe.cmmi.git

clone url:git clone http://git.erp5.org/repos/slapos.recipe.cmmi.git

issue tracker:none


3.2、3.3


支持的zc.buildout版本:1.x、2.x


travis build:travis

……|特拉维斯图片:https://api.travis ci.org/hexagonit/hexagonit.recipe.cmmi.png

…_ hexagonit.recipe.cmmi:http://pypi.python.org/pypi/hexagonit.recipe.cmmi


更改
=


>0.10(2018-11-30)
--


*在生成子进程之前确保关闭FD。

<0.9(2018-10-29)
--


*更多PY3修复。

0.8(2018-08-27)
----


*添加共享功能。


0.7(2017-06-06)
----


*修复清单。in:缺少一些文件。


0.6(2017-06-05)
----

*添加对python 3的支持。
*使用长脚本优化包装shebangs.

0.5(2017-04-07)
----


*为非常长的shebang脚本创建一个包装shell脚本。


>0.4(2017-03-08)
----


*使用slapos.recipe.build:下载解压缩而不是六边形。recipe.download.

0.1.1(2013-04-12)
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
要下载和提取的包的URL。支持的包格式是.tar.gz、.tar.bz2和.zip。
值必须是完整的url,
例如http://python.org/ftp/python/2.4.4/python-2.4.4.tgz。
``path``选项不能与'`url``同时使用。

``path``


指向包含要生成和安装的源代码的本地目录的路径。目录必须包含"configure"脚本。"`url`"选项不能与
``path``同时使用。

``prefix```


自定义安装前缀传递给
``configure``脚本的'`--prefix``选项。默认为零件的位置。注意,这是一个方便快捷的方法hich假设默认的"configure"命令用于配置包。如果使用``configure command`
选项定义自定义的configure command,则不会自动进行
`--prefix``注入。您还可以在"配置选项"中显式设置`--prefix``
参数。


``shared``


指定许多其他
包共享此包的路径。
共享部分应在[buildout]部分中定义
shared option为true或false
包将安装在选项的路径/名称/哈希上。

``md5sum``

md5包文件的校验和。如果可用,下载包的md5
校验和将与此值进行比较
,如果这些值不匹配,则配方的执行将
失败。

``make binary``

默认为"make",它应该在系统"path"中有"make"程序可用的任何系统上工作。可以在单独的行上提供多个选项,以提高可读性。

`make targets`

`make``命令的目标。默认为"install"
,这足以安装大多数软件包。如果要构建备用目标,只需使用此选项。每个
目标都必须在单独的一行给出。

``配置命令``


将运行以生成生成生成文件的配置命令的名称。
此默认值为``./configure`,这对于
配置脚本附带的包很好。当使用不同的设置编译包
时,您可能希望更改此设置。有关
示例,请参见"编译Perl包"部分。

`"配置选项"`

要为"配置"脚本提供的额外选项。默认情况下
只传递`--prefix``选项,该选项设置为part
目录。每个选项必须在单独的一行中给出。

``patch binary`

`patch``程序的路径。默认为"patch",它应该在任何系统上工作,该系统的"patch"程序位于传递给"patch"程序的"patch"选项中。默认为`-p0`.

``patches`


应用到提取源的修补程序文件列表。每个
文件都应在单独的行中给出。

。_ python钩子脚本:

``预配置钩子`


在运行
`` configure``脚本之前将执行的自定义python脚本。选项的格式为::

/path/to/the/module.py:name_of廑callable
url:name廑of廑callable

url:md5sum:name廑of廑callable

,其中第一部分是指向python
模块的文件系统路径或url,第二部分是可调用的名称。在将被调用的
模块中。可调用的将按以下顺序传递三个
参数:

1。配方中的"选项"字典。

2。全局"buildout"字典。

3.一个包含当前"os.environ"的字典,该字典用
特定于部件的重写进行扩充。


可调用的不应返回任何内容。

。注意:``os.environ``没有被修改,因此如果钩子脚本对为
部分定义的环境变量重写感兴趣,它需要从作为第三个参数传入的字典中读取它们,而不是访问'`os''.environ`
直接。

``pre-make hook`


‘造’。格式和语义与
``pre-configure hook``选项相同。

``post-make hook``

自定义python脚本将在运行
``make``后执行。格式和语义与
``pre-configure hook``选项相同。

…hook shell命令:

``pre configure`

shell命令,将在运行``configure`
脚本之前执行。它与"pre-configure hook"选项具有相同的效果,除了它是shell命令之外。

`"pre-build``

shell命令将在运行"make`"之前执行。它的作用与"pre-make hook"选项相同,只是它是
shell命令。

`pre-install`


shell命令将在运行"make`
install"之前执行。

`post-install`

shell命令将在运行后执行‘造’。它的作用与"post make hook"选项相同,只是它是
shell命令。

`keep compile dir`

这对于使用此配方编译软件但希望执行此配方未处理的其他步骤的其他配方非常有用。编译目录的位置存储在``options['compile-directory']```.
接受的值是``true``或``false`,默认为``false`.

`` promises`

列出安装部件后应该存在的路径和文件。
文件或路径必须是绝对路径。一行一个项目

如果任何项目不存在,配方将显示警告消息。
默认值为空。

`dependencies`


列出所有依赖部件:

dependencies=part1 part2…


当前部分。

``environment section`

外部命令
作为配方的一部分运行(例如make、configure等)在分叉时获得一个扩展的
环境。python hook脚本通过
扩展作为参数传递。

耳鸣。这些
引用将使用"os.environ"中的值进行扩展。例如,可以使用
将其附加到"path"变量,例如::

[component]
recipe=slapos.recipe.cmmi
environment section=


[environment]
path=%(path)s:${buildout:directory}/bin

``environment`

在执行配方之前用于更新``os.environ``的附加环境变量。


此选项的语义与``environment section``相同。如果同时提供
"environment section"和"environment",则
中的值将被后者覆盖,允许按部件定制。

这些平台的部分有一个模式"部分:平台"或"部分:平台:架构"。


架构可以是"x86"、"amd64"、"ia64"…它等于platform.machine()。

platform可以是'linux'、'cygwin'、'macos'、'sunos'、'freebsd'、
'netbsd'、'unixware'…惠奇h等于格式化的sys.platform。



[bzip2]
recipe=slapos.recipe.cmmi

[bzip2:cygwin]
patches=cygwin-bzip2-1.0.6.src.patch

[part:platform]中的所有选项都具有高优先级。

如果找不到。忽略arch
,如果仍然没有找到任何内容,请再次搜索。不使用平台部分。

此外,配方遵循`[buildout]``部分中的``download cache``选项集
,并将下载的文件存储在
下。如果未设置该值,将在构建的根目录中创建名为"downloads"的目录,并相应设置"download cache"选项。

通过将``download cache``设置到相同的
位置,可以在
不同的构建之间共享文件。


配方也遵循在``[buildout]`
部分中设置的``prefix``选项。它隐式表示此构建过程中配方为
slapos.recipe.cmmi的所有部分都将安装在`[buildout]``中的
相同的``prefix``选项中。此外,一旦获得
效果,recipe将返回前缀
目录中所有已安装的文件。部分自身的"prefix"将禁用此行为。

${buildout:prefix}$cfflags
cxxflags=-i${buildout:prefix}$cxflags
ldflags=-l${buildout:prefix}/lib



==example用法
=====


我们将使用一个简单的tarball来演示该配方。

>;>;导入os.path
>;>;src=join(os.ppath.dirname(文件名,'testdata')
>>ls(src)
-foo-bar-0.0.tar.gz
-haproxy-1.4.8-dummy.tar.gz
-package-0.0.0.tar.gz

ile``这样做也一样。


让我们创建一个构建来构建和安装包。

>;>write('buildout.cfg',
…""
…[构建]
…最新=真
…零件=包装

…[包装]
…配方=slapos.recipe.cmmi
…url=文件://%s/package-0.0.0.tar.gz
…""%src)

这将下载、提取并使用
默认生成选项生成我们的演示包。

ng package
安装package
<;blankline>;


check option"promises"

>;>write('buildout.cfg',
…""
…[构建]
…最新=错误
…零件=包装x

…[packagex]
…配方=slapos.recipe.cmmi
…url=文件://%s/package-0.0.0.tar.gz
…承诺=/usr/bin/myfoo
…""%src)

这将下载、提取并使用
默认生成选项生成我们的演示包。


>;>print(system(buildout))
卸载包。
安装包x。
配置--prefix=/sample_buildout/parts/packagex
生成包
安装包
packagex:could not find promise"/usr/bin/myfoo"
<;blankline>;

r/>==


租赁建造
过程。Perl包通常附带一个"makefile.pl"脚本,该脚本执行与"configure"脚本相同的任务,并生成一个"makefile"。

下面的示例构建一个foo::bar perl模块,并将其安装在构建内的自定义位置:

>;>;write('buildout.cfg',
…""
…[构建]
…最新=错误
…部分=foobar
…perl-lib=${buildout:directory}/perl-lib

…[foobar]
…配方=slapos.recipe.cmmi
…configure command=perl-i${buildout:perl戋lib}/lib/perl5 makefile.pl install戋base=${buildout:perl戋lib}
…url=文件://%s/foo-bar-0.0.0.tar.gz
…""%src)

>;>print(system(buildout))
卸载packagex。
安装foobar。
构建package
安装package

_在没有类似autoconf的系统的情况下安装包:

在没有类似autoconf的系统的情况下安装包

在这些情况下,构建过程
通常完全由"make"的直接选项控制。我们可以通过伪造一个不执行任何操作的configure命令并将适当的选项传递给"make"来构建这样一个
包。在大多数shell环境中找到的"true"实用程序是很好的选择,尽管任何返回零退出代码的程序都可以做到这一点。

buildout.cfg',
…""
…[构建]
…最新=错误
…零件=半氧化物

…[羟丙基]
…配方=slapos.recipe.cmmi
…configure command=true
…做出选择=
…目标=linux26
…CPU=I686
…使用PCRE=1
…url=文件://%s/haproxy-1.4.8-dummy.tar.gz
…""%src)

>;>print(system(buildout))
卸载foobar。
安装haproxy。
构建haproxy 1.4.8(虚拟包)
目标:linux26
CPU:i686
使用pcre:1
安装haproxy

安装checkout
==d构建一个现有的tarball,我们需要
使用文件系统中已经可用的代码,例如svn
签出。

esystem
并构建它。

>;>checkout_dir=tmpdir('checkout')
>;>import setuptools.archive_util
>;>setuptools.archive_util.unpack_archive('%s/package-0.0.tar.gz'%src,
…签出目录)
>;>ls(签出目录)
d package-0.0

>;>write('buildout.cfg',
…""
…[构建]
…最新=错误
…零件=包装

…[包装]
…配方=slapos.recipe.cmmi
…路径=%s/package-0.0.0
…""%checkout_dir)

>>print(system(buildout))
卸载haproxy。
安装包。
包:使用本地源目录/checkout/package-0.0.0
配置--前缀=/sample_buildout/parts/package
构建包
安装包

因为使用"路径"意味着在源代码中n获取的
不在配方的控制范围内,管理该配方的责任也不在配方范围内。

此外,当使用"path"时,
``keep compile dir``没有任何效果。




高级配置
==========


以上选项足以生成大多数包。但是,在某些情况下,它还不够,我们需要更多地控制构建过程。让我们使用新的构建再试一次,并提供更多选项。

>;>write('buildout.cfg',
…""
…[构建]
…最新=错误
…零件=包装

…[构建环境]
…cflags=-i/sw/包含
…ldflags=-i/sw/lib

…[包装]
…配方=slapos.recipe.cmmi
…url=文件://%(src)s/package-0.0.0.tar.gz
…md5sum=6b94295c042a91ea3203857326bc9209
…prefix=/某处/else
…环境部分=构建环境
…环境=
…ldflags=-l/sw/lib-l/some/extra/lib
…配置选项=
…--螺纹
…--没有foobar
…设定目标=
…安装
…安装lib
…修补程序=
…修补程序/配置。修补程序
…修补程序/makefile.dist.patch
…""%dict(src=src))


此配置使用自定义配置选项、一个环境节、
每个部件自定义到环境、自定义前缀、多个make
目标,并在脚本运行之前修补源代码。

>;>;打印(系统(构建))。
卸载包。
安装包。
包:[env]cflags=-i/sw/include
包:[env]ldflags=-l/sw/lib-l/some/extra/lib
包:应用修补程序
修补文件配置
修补文件生成文件。dist
修补配置--prefix=/somewhere/else——带线程——不带foobar
构建修补包
安装修补包
安装修补包库
<;blankline>;


自定义构建过程
==而且您需要能够更详细地控制
过程。一个这样的用例是在源代码上执行动态的
替换(可能基于
构建的信息),这不能用静态补丁来完成,也不能简单地运行任意的
命令。

构建
流程。您可以定义要运行的脚本:

-在执行配置脚本之前(预配置挂钩)
-在执行生成过程之前(预生成挂钩)
-在生成过程完成之后(后生成挂钩)

每个选项都需要包含以下信息

/full/path/to/the/python/module.py:name_of_callable


,其中可调用对象(此处name_of_callable)应采用三个参数:


1。配方中的"选项"字典。

2。全局"buildout"字典。

3.一个包含当前"os.environ"的字典,其中添加了
特定于部件的重写。


这些参数应提供可调用的所有必要信息,以便
对生成过程执行任何特定于部件的自定义。

演示功能。您可以
为每个钩子自然地有单独的模块,或者只使用一个或两个
钩子。这里我们只使用一个模块。

>;>hooks=tmpdir('hooks')
>;>write(hooks,'customhandlers.py',
…""
…感应电动机端口日志记录
…log=logging.getlogger('hook')

…def预配置(选项、构建、环境):
…log.info('这是预配置钩子!')

…def premake(选项、构建、环境):
…log.info('这是预生成钩子!')

…def postmake(选项、构建、环境):
…log.info('这是post make hook!')

…"")

和一个新的构建来尝试

>;>write('buildout.cfg',
…""
…[构建]
…最新=错误
…零件=包装

…[包装]
…配方=slapos.recipe.cmmi
…url=文件://%(src)s/package-0.0.0.tar.gz
…预配置钩子=%(模块)s:预配置
…预弯钩=%(模块)s:预弯钩
…后期制作挂钩=%(模块)s:post make
…""%dict(src=src,module='%s/customhandlers.py'%hooks))


>;>print(system(buildout))
卸载包。
安装包。
包:执行预配置钩子
钩子:这是预配置钩子!
configure--prefix=/sample_buildout/parts/package
package:执行pre-make hook
hook:这是pre-make hook!
构建包
安装包
包:执行post-make-hook
hook:这是post-make-hook!

如果您喜欢使用shell脚本,请尝试以下选项:
预配置
预构建
预安装
安装后

让我们创建一个构建来使用这些选项。


…[构建]
…最新=错误
…零件=包装

…[包装]
…配方=slapos.recipe.cmmi
…url=文件://%s/package-0.0.0.tar.gz
…pre configure=echo"配置部分:${:_buildout_section_name}"
…预构建=echo"oh-oh-oh">;a.txt
…预安装=cat a.txt
…安装后=rm-f a.txt&;echo"已完成。"
…""%src)

这将在相应阶段运行pre-configure、pre-build、pre-install、post-install as
shell命令。

>>print(system(buildout))
卸载包。
安装包。
包:执行pre-configure
configure p艺术:包
配置--前缀=/示例构建/部件/包
包:执行预构建
构建包
包:执行预安装
噢噢噢
安装包
包:执行后安装
完成。

i-platforms
==



配方可以为每个平台指定生成选项。例如,

>;>write('buildout.cfg',
…""
…[构建]
…最新=错误
…零件=包装

…[包装]
…配方=slapos.recipe.cmmi
…url=文件://%s/package-0.0.0.tar.gz
…预配置=回显"在公共平台中配置"
…安装后=echo"已完成"。

…[包装:cygwin]
…pre configure=echo"在cygwin平台中配置"
…预安装=echo"在cygwin中安装"
…post install=echo-n"cygwin"&;${package:post install}
…""%src)

在linux中,配方从"package"部分获取选项,其中
只有"pre-configure"和"post-install"。输出为打印(系统(构建))
安装包程序包:安装后执行
完成。

s``prefix``作为配置前缀,如果部件中没有设置
``configure command``或者``make binary``
等于'make'和``make target``includes pattern'\s+install.*'

*第二,当
配方在intall之后返回时,返回前缀中所有新安装的文件。

*最后,更改一些环境变量(请参见第一节)。


让我们看看在构建部分设置前缀时会发生什么情况:

>;>write('buildout.cfg',
…""
…[构建]
…最新=错误
…零件=包装
…前缀=${buildout:directory}/mylocal

…[包装]
…配方=slapos.recipe.cmmi
…url=文件://%s/package-0.0.0.tar.gz
…预配置=mkdir-p"${buildout:prefix}"
…""%src)

>;>print(system(buildout))
卸载包。
安装包。
包:执行预配置
配置--前缀=/sample\u buildout/mylocal
构建包
安装包
<;blankline>;

这些环境变量和前缀的值,你知道它们之间的区别。


对于
示例,

>;>write('buildout.cfg',
…""
…[构建]
…最新=错误
…零件=包装
…前缀=${buildout:directory}/mylocal

…[包装]
…配方=slapos.recipe.cmmi
…前缀=${buildout:parts directory}/package
…url=文件://%s/package-0.0.0.tar.gz
…预配置=rm-rf"${buildout:prefix}"
…安装后=test-d"${buildout:prefix}"echo"none"
…""%src)

>;>print(system(buildout))
正在卸载包。
正在安装包。
包:正在执行预配置
配置--前缀=/sample\u buildout/parts/package
正在构建包
正在安装包
包:正在执行post-install
none

则不会创建额外的环境变量,如cflags等,也不会创建
${buildout:prefix}目录。


…[构建]
…最新=错误
…零件=包装-2
…前缀=${buildout:directory}/mylocal

…[包装]
…配方=slapos.recipe.cmmi
…url=文件://%s/package-0.0.0.tar.gz
…预安装=睡眠2;mkdir-p"${buildout:prefix}";echo x>;"${buildout:prefix}/a.txt"
…[包-2]
…配方=slapos.recipe.cmmi
…url=文件://%s/package-0.0.0.tar.gz
…预安装=睡眠2;mkdir-p"${buildout:prefix}";echo x>;"${buildout:prefix}/b.txt";echo
…"%(src,src))

>配置--prefix=/sample_buildout/mylocal
building package
package-2:执行预安装
<;blankline>;
installing package
<;blankline>;

>;>ls('mylocal')
-a.txt
-b.txt

-2,它应该只删除文件b.txt(当前似乎已损坏
a它没有删除任何内容):

>;>write('buildout.cfg',
…""
…[构建]
…最新=错误
…零件=包装
…前缀=${buildout:directory}/mylocal

…[包装]
…配方=slapos.recipe.cmmi
…url=文件://%s/package-0.0.0.tar.gz
…预安装=睡眠2;mkdir-p"${buildout:prefix}";echo x>;"${buildout:prefix}/a.txt"
…""%src)

>;>;打印(系统(构建))
卸载包-2。
更新包。

>;>;ls('mylocal')
-a.txt
-b.txt


magic prefix
===

然后检查make binary和
make targets是否都未设置,如果设置了,则字符串"prefix=xxx"将附加到make targets中。XXX是这个配方的最后一个前缀。我们称之为"magic prefix"。

=rm%(prefix)s/*.h


另一部分可以通过
${part:prefix}引用此部分的magic prefix,它将返回magic prefix,而不是part部分中的literal
值。例如,

>;>write('buildout.cfg',
…""
…[构建]
…最新=错误
…零件=包装-2
…前缀=/mytemp

…[包装]
…配方=slapos.recipe.cmmi
…url=文件://%s/package-0.0.0.tar.gz
…configure command=true
…使binary=true

…[包-2]
…配方=slapos.recipe.cmmi
…url=文件://%s/package-0.0.0.tar.gz
…configure command=true
…使binary=true
…post install=echo package magic prefix是${package:prefix}
…""%(src,src))

>;>print(system(buildout))
卸载包。
安装包。
安装包-2。
package-2:执行安装后
包的magic前缀是/mytemp
<;blankline>;

在stdout中显示"prefix"值。

>;>write('buildout.cfg',
…""
…[构建]
…最新=错误
…零件=包装

…[包装]
…配方=slapos.recipe.cmmi
…url=文件://%s/package-0.0.0.tar.gz
…configure命令=./configure
…pre-install=sed-i-e"s/安装包/安装包的前缀为"\$\$"/g"makefile
…"%src)

>;>print(system(buildout))
卸载包-2。
卸载包。
安装包。
配置
构建包
包:执行预安装选项,它将被
替换为配方最终前缀。

>;>write('buildout.cfg',
…""
…[构建]
…最新=错误
…零件=包装

…[包装]
…配方=slapos.recipe.cmmi
…url=文件://%s/package-0.0.0.tar.gz
…configure命令=./configure
…使targets=install lib prefix=%%(前缀)s
…pre-install=sed-i-e"s/安装包/安装包的前缀为"\$\$"/g"makefile
…"%src)

>;>print(system(buildout))
卸载包。
installing包。
配置
生成包
包:执行预安装
在/sample_buildout/parts/package-lib安装包


额外的部件依赖项
=====

配方将处理opt中的所有部件列表ion
``依赖关系``作为依赖部分。zc.buildout将在安装此部件之前安装所有依赖部件。例如,

>;>write('buildout.cfg',
…""
…[构建]
…最新=错误
…零件=包装

…[包装]
…配方=slapos.recipe.cmmi
…依赖项=包-2
…url=文件://%s/package-0.0.tar.gz

…[包-2]
…配方=slapos.recipe.cmmi
…url=文件://%s/package-0.0.0.tar.gz
…""%(src,src))

package
安装程序包
安装程序包。
配置--prefix=/sample_buildout/parts/package
生成程序包
安装程序包

现在,让我们为"程序包-2"添加一个新选项,

>;write('buildout.cfg',
…""
…[构建]
…最新=错误
…零件=包装

…[包装]
…配方=slapos.recipe.cmmi
…依赖项=包-2
…url=文件://%s/package-0.0.tar.gz

…[包-2]
…配方=slapos.recipe.cmmi
…url=文件://%s/package-0.0.0.tar.gz
…configure命令=。/configure
…""%(src,src))

look,"package"可以重新安装:

>;>;print(system(buildout))
卸载包。
卸载包-2。
安装包-2。
配置构建包
安装包
e.
配置--prefix=/sample_buildout/parts/package
building package
install package

install shared package
=d-r u+w%(path)s&;rm-rf%(path)s%dict(path=join(os.path.dirname(u file_uu),'shared'))
>;>;shared_u dir=join(os.path.dirname(u file_u),'shared')
>;>;os.mkdir(shared_u dir)

未使用:
>;>write('buildout.cfg',
…""
…[构建]
…最新=错误
…零件=包装

…[包装]
…配方=slapos.recipe.cmmi
…url=文件://%s/package-0.0.0.tar.gz
…共享=真
…""%src)

>;>print(system(buildout))\doctest:+省略号
卸载包。
卸载包-2。
安装包。
配置--prefix=/sample_buildout/parts/package
构建包
安装包

-部分已设置且共享为true,生成包失败,生成目录已删除,
生成目录compile\uu保留以供调试。
还将创建带有环境变量的shell脚本,以便开发人员可以尝试与配方相同的生成
过程。
>;_=system('mv%s/package-0.0.0.tar.gz%s/package-0.0.tar.gz.bak'%(src,src))
>;>gt;从io import bytesio导入tarfile
>;>gt;导入sys
>;>tar path=os.path.join(src,'package-0.0.tar.gz')
>;>打开(tarpath,'w:gz')作为tar:
…configure=b"无效"
…info=tarfile.tarinfo('configure.off')
…info.size=len(配置)
…信息模式=0o755
…tar.addfile(info,bytesio(configure))
>;>;写入('buildout.cfg',
…""
…[构建]
…最新=错误
…零件=包装
…共享部分=%s

…[包装]
…配方=slapos.recipe.cmmi
…url=文件://%s/package-0.0.0.tar.gz
…共享=真
…环境=
…foo=bar
…""%(共享目录,src))
>;>print(system(buildout))\doctest:+省略号
包:共享目录…/slapos.recipe.cmmi/slapos/recipe/cmmi/shared/package/……为包设置
卸载包。
安装包。
包:检查包是否安装在共享路径:…/slapos.recipe.cmmi/slapos/recipe/cmmi/shared/package/…
包:[env]foo=bar
包:命令失败,退出代码127:。/configure--prefix="…/slapos.recipe.cmmi/slapos/recipe/cmmi/shared/package/…"
包:编译错误。该包保留在…/slapos.recipe.cmmi/slapos/recipe/cmmi/shared/package/..uu compile廑,您可以在那里检查出了什么问题。
已经生成了一个shell脚本slapos.recipe.build.env.sh。您可以在shell中获取源代码以重现生成环境。
/bin/sh:1:。/configure:not found
while:
installing package.
error:system error
>;>;import glob
>;>;cat(glob.glob(os.path.join(shared_dir,'package/**u compile_/slapos.recipe.build.env.sh'))[0])
export foo="bar"



.gz"%(src,src))
>>gt;打印(系统(构建))\doctest:+省略号
包:共享目录…/slapos.recipe.cmmi/slapos/recipe/cmmi/shared/package/……为包设置
安装包。
包:检查包是否安装在共享路径:…/slapos.recipe.cmmi/slapos/recipe/cmmi/shared/package/…
包:删除已存在的目录…/slapos.recipe.cmmi/slapos/recipe/cmmi/shared/package/…\u compile__
配置--prefix=…/slapos.recipe.cmmi/slapos/recipe/cmmi/shared/package/…
生成包
安装包

如果安装了一个包,则不执行任何操作。
>;删除('.installed.cfg')
>;写入('buildout.cfg',
…""
…[构建]
…最新=错误
…零件=包装
…共享部分=%s

…[包装]
…配方=slapos.recipe.cmmi
…url=文件://%s/package-0.0.0.tar.gz
…共享=真
…环境=
…foo=bar
…""%(共享目录,src))
>;>print(system(buildout))\doctest:+省略号
包:共享目录…/slapos.recipe.cmmi/slapos/recipe/cmmi/shared/package/……为包设置
安装包。
包:检查包是否安装在共享路径:…/slapos.recipe.cmmi/slapos/recipe/cmmi/shared/package/…
包:此共享包已由其他包安装

位置:
>;>;写入('buildout.cfg',
…""
…[构建]
…最新=错误
…零件=包装
…共享部分=%s

…[包装]
…配方=slapos.recipe.cmmi
…url=文件://%s/package-0.0.0.tar.gz
…共享=真
…更改=真
…""%(共享目录,src)

>;>;打印(系统(构建))\doctest:+省略号
包:共享目录…/slapos.recipe.cmmi/slapos/recipe/cmmi/shared/package/……为包设置
卸载包。
安装包。
包:检查包是否安装在共享路径:…/slapos.recipe.cmmi/slapos/recipe/cmmi/shared/package/…
配置--prefix=…/slapos.recipe.cmmi/slapos/recipe/cmmi/shared/package/…
构建包
安装包

为了更具体的需要,您可以编写自己的配方,使用
``slapos.recipe.cmmi``并将``keep compile dir``选项设置为``true`。
然后,您可以通过读取c"options['c ompile-directory']``中的compile目录,来自您自己的
配方。





(grzn)
*马可马里亚尼(mmariani)
*galpin


下载

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在Eclipse中使用多个调用在一行上打印java   javajackson序列化问题。只有同一实体的第一个对象可以很好地序列化   Java中Deflate函数的等价充气   使用customlitview的java Android actionbar搜索   java“<T>T get()”是什么意思?(它有用吗?)   目标c使用CommonCrypto使用AES256加密,使用OpenSSL或Java解密   java在运行时更新资源文件   fileinputstream在java中访问并将数据写入现有文件   带集群的java Android Mapbox我希望每个功能都有不同的标记图像   java JDK8>JDK10:PKIX路径生成失败:SunCertPathBuilderException:找不到请求目标的有效证书路径   java使用Hk2生成具有指定构造函数参数的实例   为什么这个系统。出来Java中的println()打印到控制台?   java目录和文件名连接不起作用   使用mockito和通配符绘图的java