python脚本中有什么%{__ python34}?

时间:2017-08-02 13:12:31

标签: python

我看到一个以

开头的python脚本
#!%{__python34}

from __future__ import unicode_literals
# Whether we're Python 2

我猜__python34用于获取python2或python 3.4的路径,但它似乎不起作用,因为输出消息表明该文件不存在...

感谢。

1 个答案:

答案 0 :(得分:2)

我相信这是一种被称为"模板" (%{var}RPM使用的模板引擎中使用.spec,我们可以看到in this example,尤其请参阅templates文件。并且存在大量这些模板引擎,Jinja2Mako等等(可以找到更详尽的列表here

现在让我们使用Jinja2来创建一个简单的例子,我们创建的第一件事就是模板(让我们把它放在#!{{ python }} def main(): print("It works") 文件夹中以遵循约定),让&#39 ; s调用它,python_script_tmpl:

myapp/
  __init__.py
  templates/
    python_script_tmpl

现在让我们创建一个 init (空脚本)来创建一个与Jinja2一起使用的环境。

现在你应该有一个像这样的结构:

my_app

让我们在from jinja2 import Environment, PackageLoader env = Environment(loader=PackageLoader("__init__", "templates")) #use the blank __init__ script to init the environment, and the templates folder to load templates tmpl = env.get_template("python_script_tmpl") #load the template tmpl.stream(python="/usr/bin/env python3").dump("python_script.py") #create from the template a script called python_script.py 目录中启动一个shell,然后运行以下行(doc to install jinja2):

python_script.py

现在在my_app的根目录下你应该有脚本#!/usr/bin/env python3 def main(): print("It works") ,它看起来应该是这样的:

myapp/
  __init__.py
  python_script.py
  templates/
    python_script_tmpl

使用最终文件夹结构:

RPM

假设shebang and the env is correctly configured您可以毫无问题地运行脚本。 (虽然不是一个非常有用的脚本)

现在,模板是什么意思?

如果你需要花很多时间重复部分(例如shebang),并且你必须修改它,那么你必须为它出现的每个文件修改它,如果你使用了模板,你只需要修改一次变量并注入它。这是模板化的直接优势。

PS:正如@CharlesDuffy所提到的,这个脚本可能是从 var matrix = [ [0, 0, 0, 1, 0], [1, 0, 0, 0, 1], [0, 0, 1, 0, 0], ]; $(function () { var Grid = function (width, height) { var canvas = <HTMLCanvasElement>document.getElementById("myCanvas"); var ctx = canvas.getContext("2d"); ctx.rect(20, 20, 150, 100); ctx.stroke(); } }); var grid = new foo.Grid(matrix); } 包中提取的,所以除了学习目的或重新打包之外,我建议你使用rpm命令行工具来运行整个包。 / p>