Makina Corpus赞助的zc.buildout食谱,用于编译和安装软件或Python包,并生成脚本或配置文件。
项目描述
简介
这是一组可以在minitage环境中使用或不在minitage环境中使用的食谱。在minitage中使用它们的好处是,你将自动拥有构建环境中所有的系统依赖项。
- 该egg有以下入口点
cmmi:安装配置/制作/制作安装软件
fetch:使用git、http、frp、静态、hg、svn或bzr从某处获取某些东西。
egg:安装Python eggs / packages 'setuptools'
printer:打印或输出所有版本,这些版本是满足egg需求所必需的(versions.cfg变得简单)
scripts:从egg中安装脚本,并在它们不在缓存中的情况下安装egg依赖项
wsgi:制作一个Python paste配置文件,该文件可以通过mod_wsgi食用,并包含所有必需的egg依赖项。
- 我为什么要重新编写另一个buildout食谱构建器的理由是
支持下载内容
不依赖于easy_install依赖系统
支持egg和其他发行版的即时补丁。
支持在构建系统每个阶段支持多个钩子。
支持 distutils
强大的离线模式
我们喜欢 pypi,但提供了一种扫描 eggs 的模式,无需检查索引,
支持格式错误或未索引的分布。换句话说,我们提供一个 URL,然后配方构建它,就这么多。
所有配方都必须支持自动整理依赖关系和 rpath 链接。
您可以在 minitage 的以下资源中浏览代码
您可以使用 buildout.minitagificator 无需任何努力迁移您的构建输出
Makina Corpus赞助的软件
minitage.recipe.scripts
摘要
此配方旨在安装 eggs 和 Python 软件,并在已安装的软件之上生成脚本和环境文件。
此配方继承自 minitage;recipe:egg。
它受到 zc.recipe.eggs* 的极大启发,并试图完全替代它,同时保持 API 兼容性。
您可以使用它与 buildout.minitagificator 扩展结合使用,该扩展 monkey patch zc.buildout 以使用 minitage 配方。
我们可以做到 zc.recipe.egg 做不到的事情,或者根本做不到,或者不是我们想要的方式
所有脚本都支持初始化代码
还处理了 'scripts' eggs 元数据
您可以使用它就像使用 minitage.recipe:egg 一样,使用修补工具和等。
此配方还声明在以下入口点下
minitage.recipe:eggs
minitage.recipe:script
特定选项
所有共享选项和来自 minitage.recipe:egg 的选项 +
脚本
要生成的脚本,如果为空,则为所有工作集生成脚本。
如果您的 egg 有旧的 'scripts' 元数据,并且您想要生成包装器的旧脚本,只需将 egg 名称添加到脚本条目中。
如果您想重命名一个脚本,只需输入类似 entrypoint|scriptname=NewName 的内容
s=NewName如果不想创建脚本,只需输入一行分隔的不想要的脚本列表
- 入口点
一个入口点标识符的列表,形式如下:
name=module:attrs其中 name 是脚本名称,module 是解析到模块名称的点分隔名称,而 attrs 是解析到模块中的可调用对象的点分隔名称。此选项在处理未声明入口点的分布时很有用,例如,未编写为与 setuptools 一起工作的分布。
- 解释器
要生成的脚本的名称,该脚本允许使用设置了所有工作集条目的 PYTHONPATH 访问 Python 解释器。
dependent-scripts 当设置为 true 时,除了特定命名的 eggs 外,还会为所有必需的 eggs 生成脚本。这个想法来自此配方的两个分支,repoze.recipe.egg 和 pylons_sandbox,但选项名称用短划线而不是下划线拼写,默认值为 false。
- (script-name|interpretername-)arguments
指定一些作为 Python 源传递给入口点的参数。
- (script-name|interpretername-)initialization
在调用入口点之前运行的 Python 代码
- env_initialization
在 env(shell)初始化之后运行代码
template-replacements
在模板中替换变量值以覆盖 buildout 的 strip 机制(初始化、env_initialization、arguments)
=> 前后的空格很重要
模式的形式是
re-pattern => value
详细文档
生成所有脚本
因此,如果不指定任何脚本入口点在 buildout 部分。
>>> init_env() >>> index_url = start_server(os.path.sep.join(tempdir)) >>> data = """ ... [buildout] ... eggs-directory =${buildout:directory}/eggs ... download-cache=${buildout:directory}/dl ... parts = part ... [part] ... recipe=minitage.recipe.scripts ... find-links=%(index)s ... eggs=foo ... """%{'index': index_url} >>> touch('buildout.cfg', data=data) >>> noecho = [remove(os.path.join('eggs', egg)) for egg in os.listdir('eggs') if 'foo' in egg] >>> sh('bin/buildout -vvvvv install') b... minitage.recipe: Generated scripts: 's', 'toto.py'...
看看生成了什么。
>>> cat('bin', 'toto.py') #!... # ! GENERATED BY minitage.recipe ! import os import sys import subprocess... sys.path[0:0] = ['/tmp/buildout.test/eggs/foo-1.0-py....egg' ]... # EXEC ORGINAL CODE WITHOUT SHEBANG __doc__ = 'I am generated by minitage.recipe.script recipe'... os.environ['PYTHONPATH'] = ':'.join(sys.path + os.environ.get('PYTHONPATH', '').split(':')) sys.argv.pop(0) sys.exit( subprocess.Popen( [sys.executable, '/tmp/buildout.test/eggs/foo-1.0-py....egg/EGG-INFO/scripts/toto.py']+sys.argv, env=os.environ ).wait() )... >>> cat('bin', 's') #!... #!!! #GENERATED VIA MINITAGE.recipe !!!... import sys... sys.path[0:0] = [ '/tmp/buildout.test/eggs/foo-1.0-py....egg' ]... import toto.toto... if __name__ == '__main__': toto.toto.f()...
选择要安装的脚本
仅安装 s。
>>> init_env() >>> index_url = start_server(os.path.sep.join(tempdir)) >>> data = """ ... [buildout] ... eggs-directory =${buildout:directory}/eggs ... download-cache=${buildout:directory}/dl ... parts = part ... [part] ... recipe=minitage.recipe.scripts ... find-links=%(index)s ... scripts = ... s ... eggs=foo ... """%{'index': index_url} >>> touch('buildout.cfg', data=data) >>> sh('bin/buildout -vvvvv install') b... minitage.recipe: Generated scripts: 's'...
仅安装 toto.py。
>>> data = """ ... [buildout] ... eggs-directory =${buildout:directory}/eggs ... download-cache=${buildout:directory}/dl ... parts = part ... [part] ... recipe=minitage.recipe.scripts ... find-links=%(index)s ... scripts = ... toto.py ... eggs=foo ... """%{'index': index_url} >>> touch('buildout.cfg', data=data) >>> sh('bin/buildout -vvvvv install') b... minitage.recipe: Generated scripts: 'toto.py'....
声明入口点
我们将添加一个要生成的 't' 入口点。
>>> init_env() >>> index_url = start_server(os.path.sep.join(tempdir)) >>> data = """ ... [buildout] ... eggs-directory =${buildout:directory}/eggs ... download-cache=${buildout:directory}/dl ... parts = part ... [part] ... recipe=minitage.recipe.scripts ... find-links=%(index)s ... entry-points=t=toto.toto:f ... eggs=foo ... """%{'index': index_url} >>> touch('buildout.cfg', data=data) >>> sh('bin/buildout -vvvvv install') b... minitage.recipe: Generated scripts: 't'... >>> cat('bin', 't') #doctest: +REPORT_NDIFF #!... #!!! #GENERATED VIA MINITAGE.recipe !!! <BLANKLINE> import sys <BLANKLINE> <BLANKLINE> <BLANKLINE> sys.path[0:0] = [ '/tmp/buildout.test/eggs/foo-1.0-... ...] <BLANKLINE> <BLANKLINE> <BLANKLINE> import toto.toto <BLANKLINE> if __name__ == '__main__': toto.toto.f() <BLANKLINE>
添加初始化代码
关于为 gis env 添加环境变量的情况。
>>> init_env() >>> index_url = start_server(os.path.sep.join(tempdir)) >>> data = """ ... [buildout] ... eggs-directory =${buildout:directory}/eggs ... download-cache=${buildout:directory}/dl ... parts = part ... [part] ... recipe=minitage.recipe.scripts ... find-links=%(index)s ... entry-points=t=toto.toto:f ... eggs=foo ... initialization = import os;os.environ.set('GDAL', 'TRUE') ... """%{'index': index_url} >>> touch('buildout.cfg', data=data) >>> sh('bin/buildout -vvvvv install') b...
>>> "import os;os.environ.set('GDAL', 'TRUE')" in open(os.path.join('bin', 't')).read() True
添加参数
关于为我们的启动器添加参数的情况。
>>> init_env() >>> index_url = start_server(os.path.sep.join(tempdir)) >>> data = """ ... [buildout] ... eggs-directory =${buildout:directory}/eggs ... download-cache=${buildout:directory}/dl ... parts = part ... [part] ... recipe=minitage.recipe.scripts ... find-links=%(index)s ... eggs = foo ... entry-points=t=toto.toto:f ... arguments = ['a', 'b'] ... """%{'index': index_url} >>> touch('buildout.cfg', data=data) >>> sh('bin/buildout -vvvvv install') b...
>>> "toto.toto.f(['a', 'b'])" in open(os.path.join('bin', 't')).read() True
生成Python解释器
以下是生成具有工作集所有环境的特定Python解释器的方法。
>>> init_env() >>> index_url = start_server(os.path.sep.join(tempdir)) >>> data = """ ... [buildout] ... eggs-directory =${buildout:directory}/eggs ... download-cache=${buildout:directory}/dl ... parts = part ... [part] ... recipe=minitage.recipe.scripts ... find-links=%(index)s ... interpreter = mypy ... arguments = ['a', 'b'] ... eggs=foo ... """%{'index': index_url} >>> touch('buildout.cfg', data=data) >>> sh('bin/buildout -vvvvv install') b... minitage.recipe: Generated scripts: 'mypy',...
>>> cat('bin', 'mypy') #!... #!!! #GENERATED VIA MINITAGE.recipe !!!... sys.path[0:0] = [ '/tmp/buildout.test/eggs/foo-1.0-py....egg' ]... if _interactive: import code code.interact(banner="", local=globals())...
生成环境文件
以下是生成特定环境文件的方法,您可以从该文件中获取PYTHONPATH,并填充您已配置的eggs。
>>> init_env() >>> index_url = start_server(os.path.sep.join(tempdir)) >>> data = """ ... [buildout] ... download-cache=${buildout:directory}/dl ... eggs-directory =${buildout:directory}/eggs ... parts = part ... [part] ... recipe=minitage.recipe.scripts ... find-links=%(index)s ... env-file = mypy ... eggs=foo ... """%{'index': index_url} >>> touch('buildout.cfg', data=data) >>> sh('bin/buildout -vvvvv install') b... >>> cat('bin', 'mypy') #!/usr/bin/env sh <BLANKLINE> PYTHONPATH="/tmp/buildout.test/eggs/foo-1.0..." export PYTHONPATH <BLANKLINE> <BLANKLINE> <BLANKLINE> <BLANKLINE>
变更日志
1.58 (2013-03-31)
修复了一个错误,该错误会在某些边缘情况下生成带有额外信息的eggs脚本。
1.57 (2013-02-13)
buildout2 兼容性
1.56 (2013-02-13)
保留脚本的返回代码
1.55 (2011-03-11)
使用 os.execvpe 来生成进程,而不是 subprocess。感谢 Dave Foster (daf)
分割测试
为解释器脚本添加初始化
修复类型“列表”和模式替换代码
1.50
解决当 setup.py 中锁定版本与 buildout 中的不同版本存在冲突时的安装问题
1.47
添加了依赖脚本选项,以坚持使用 zc.recipe.egg
1.45
更好地处理入口点/控制台脚本冲突选项(cs. 前缀,见代码)
添加每个脚本的选项(初始化、参数、Python)
1.44
当 EntryPoint 和 Script 有相同的名称时,以 EP 为胜。
1.41
修复了一个特殊情况,其中所有脚本都被过滤掉了
1.39
在生成 env.file 时不要保留 PYTHONPATH
1.37
装饰器辅助工具
1.36
修复开发链接
1.35
从 minitage.recipe 中分割出来
项目详情
minitage.recipe.scripts-1.58.zip 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ce9d0bdfa3c0ca811b71d81585cb6e10ddf9e452522f095bed27a79553e39000 |
|
MD5 | 694ad1d9e710646de923e701c3c1a432 |
|
BLAKE2b-256 | 8ee76192121b29396bfb795b74b9102a80ce106a4de652895c088265e3e7cc1e |