我看到一个以
开头的python脚本#!%{__python34}
from __future__ import unicode_literals
# Whether we're Python 2
我猜__python34用于获取python2或python 3.4的路径,但它似乎不起作用,因为输出消息表明该文件不存在...
感谢。
答案 0 :(得分:2)
我相信这是一种被称为"模板" (%{var}
在RPM使用的模板引擎中使用.spec
,我们可以看到in this example,尤其请参阅templates
文件。并且存在大量这些模板引擎,Jinja2,Mako等等(可以找到更详尽的列表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>