跳转到主要内容

Buildout配方,用于设置和获取环境变量。

项目描述

Build status

概述

此配方允许在执行buildout期间设置和获取环境变量。

该配方将当前环境变量映射到其部分,例如${environment:USER}将返回当前用户。

要设置环境变量,只需在部分中设置即可。

环境变量是在初始化Recipe实例期间设置和获取的,即在读取buildout.cfg之后但在安装或更新任何配方之前。

示例用法:使用环境变量

我们将首先创建一个使用该配方的buildout

>>> write('buildout.cfg',
... """
... [buildout]
... parts = environment print
...
... [some-section]
... some-option = ${environment:SOME_VARIABLE}
...
... [environment]
... recipe = collective.recipe.environment
...
... [print]
... recipe = mr.scripty
... install =
...     ... print(self.buildout['some-section']['some-option'])
...     ... return []
... """)

使用mr.scripty配方打印出${some-section:some-option}选项的值。

现在我们设置环境变量

>>> import os
>>> os.environ['SOME_VARIABLE'] = 'some_value'

运行buildout给我们

>>> run_buildout()
START...
some_value
...END

示例用法:设置环境变量

我们将首先创建一个使用该配方的buildout

>>> write('buildout.cfg',
... """
... [buildout]
... parts = environment print
...
... [some-section]
... some-option = value2
...
... [environment]
... recipe = collective.recipe.environment
... var1 = value1
... var2 = ${some-section:some-option}
...
... [print]
... recipe = mr.scripty
... install =
...     ... import os
...     ... for var in ('var1', 'var2'):
...     ...     print('%s = %s' % (var, os.environ[var]))
...     ... return []
... """)

使用mr.scripty配方打印出环境变量的值。

运行buildout给我们

>>> run_buildout()
START...
var1 = value1
var2 = value2
...END

类似配方

将环境变量镜像到配方部分的功能主要来自gocept.recipe.env

回归测试:包含变量替换语法的值会破坏东西

问题:如果环境变量的值包含类似Buildout语法的变量替换内容,则会导致问题。我们通过使用两个美元符号来转义变量替换来解决这个问题。例如:${foo}变为$${foo}

让我们看看它是否工作。

设置环境变量

>>> os.environ['PROBLEM_VAR_1'] = '${foo}'
>>> os.environ['PROBLEM_VAR_2'] = '${foo:bar}'
>>> os.environ['PROBLEM_VAR_3'] = 'Contains ${foo} and also ${foo:bar}.'
>>> os.environ['LEGAL_VAR_1'] = '$foo'
>>> os.environ['LEGAL_VAR_2'] = '{foo}'

使用这些变量编写buildout

>>> write('buildout.cfg',
... """
... [buildout]
... parts = environment print
...
... [some-section]
... option-1 = ${environment:PROBLEM_VAR_1}
... option-2 = ${environment:PROBLEM_VAR_2}
... option-3 = ${environment:PROBLEM_VAR_3}
... option-4 = ${environment:LEGAL_VAR_1}
... option-5 = ${environment:LEGAL_VAR_2}
...
... [environment]
... recipe = collective.recipe.environment
...
... [print]
... recipe = mr.scripty
... install =
...     ... section = self.buildout['some-section']
...     ... for (k, v) in sorted(section.items()):
...     ...     print('{} = {}'.format(k, v))
...     ... return []
...
... """)

运行buildout给我们

>>> run_buildout()
START...
option-1 = $${foo}
option-2 = $${foo:bar}
option-3 = Contains $${foo} and also $${foo:bar}.
option-4 = $foo
option-5 = {foo}
...END

变更日志

1.1.0 (2017-07-27)

新功能

  • 修复Python 3兼容性代码。[cas–]

1.0.0 (2017-07-20)

重大更改

  • 修复bug:包含变量替换语法的值会导致问题。这是一个重大更改,因为有问题的地方被转义了,例如,“${foo}”变为“$${foo}”。

0.2.0 (2012-08-21)

  • 现在可以读取环境变量了。

0.1b1 (2011-08-18)

  • 首次发布。

项目详情


下载文件

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

源代码分发

collective.recipe.environment-1.1.0.tar.gz (5.4 kB 查看哈希)

上传时间 源代码

支持者